tObject方法,发送完毕返回nil。
32、异常
阻止程序继续执行的不正常条件。使用编译器指令@try、@catch、@finally处理
33、分类
分类允许我们向一个已有的类添加方法,而不用子类化它,并且不必访问类的源代码。
34、扩展
扩展允许你通过在类的声明文件中添加一个接口部分,从而在公有视野之外声明方法。提供一个内部的setter方法来访问你希望公有且只读的实例变量。
35、@property语句
@property(attributes)type name;
attributes描述了如何编写访问器
#import
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
@property (retain) NSString* caption;
@property (retain) NSString* photographer;
@end
Category类别
#import
@interface NSString (Utilities)
- (BOOL) isURL;
@end
36、assign、retain、copy
这些属性影响到合成的setter如何构建。
37、readwrite和readonly
读写、只读
38、nonatomic
没有声明为nonatomic的特性默认都是atomic的。如果指定nonatomic,编译器则合成访问器而不考虑线程安全性。
readwrite(默认)或者 readonly:设置属性是可读写的(拥有 getter/setter)或是只读的(只有 getter);
assign(默认),retain 或 copy:设置属性的存储方式;
nonatomic:不生成线程安全的代码,默认是生成的(没有 atomic 关键字);
getter=…,setter=…:改变访问器默认的名字
39、协议
协议是一组预定义的方法,一个类可以选择来实现它们。
protocol-协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。
delegate-委托,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。
当一个A view 里面包含了B view b view需要修改a view界面,那么这个时候就需要用到委托了。
需要几个步骤
1。首先定一个协议
2。a view实现协议中的方法
3。b view设置一个委托变量
4。把b view的委托变量设置成a view,意思就是 b view委托a view办事情。
5。事件发生后,用委托变量调用a view中的协议方法
有很多时候是需要在B类口中来完成一些对A类的操作, 这时就需要A设个代理让B来完成了,这个在应用中很常见也很实用。
关于正式协议:
. @protocol protocolName
. @optional -(void)delegateMethodA
. @required -(void)delegateMethodB
. // other methods . ...
. @end
正式协议类似于java的借口或抽象类。
@optional 的方法,可实现也可不实现,但@required 的方法必需实现。默认为@required。
委托代理就是在在一个对象a内部设置一个 id类型的实例变量,然后将另外一个对象b赋值给a的这个实例变量,这样就可用通过操作实例变量a的这个id变量来调用b对象的方法。
采用一个协议的类,必须实现协议的必需方法,可以自由的实现或不实现协议的任何可选的方法。
其中@required指令声明的方法是必需的。
40、TablePrinter
为其它对象提供一个表格打印任务服务
TablePrinterDataSource 协议的任何对性爱那个打印出一个表格
41、引用计数
内存管理提供了两种替代系统:引用计数和自动垃圾收集。
原理:每个对象存储了一个计数,它是使用该对象的其它对象的数目。
1,alloc, allocWithZone,new(带初始化)
为对象分配内存,retainCount为“1”,并返回此实例
2,release
retainCount 减“1”,减到“0”时调用此对象的dealloc方法
3,retain
retainCount 加“1”
4,copy,mutableCopy
复制一个实例,retainCount数为“1”,返回此实例。所得到的对象是与其它上下文无关的,独立的对象(干净对象)。
5,autorelease
在当前上下文的AutoreleasePool栈顶的autoreleasePool实例添加此对象,由于它的引入使Objective-C(非GC管理环境)由全手动内存管
理上升到半自动化。AutoreleasePool使Objective-C成为内存管理半自动化语言。
在设置器里面使用autorelease方法会更加安全一些,因为要改变的变量的新旧两个值可能指向的是同一个对象。而你可能不希望立刻释放实际上你要保留的对象。
42、所有权
你创建了一个对象,你拥有它。
通过向其他人所创建的对象发送一条retain消息,你拥有它。
当你使用完时,必须发送release消息来释放所有权。
当不再使用时,必须销毁它。
43、垃圾收集
通过一个运行程序来找到不再使用的对象并销毁他们,并将他们的字节返给堆。)。
. 释放一个对象的引用实际上有两种方法:release 和 autorelease。标准的release会立刻释放对象的引用。autorelease会等一会儿才释放,但是引用实际上会一直存在,直到当前方法结束(除非你添加自定义的代码来明确的改变它)。
dealloc方法在一个对象从内存中删除时被调用。通常在这个方法里面释放所有对象里的实例变量。
分配的(alloc)对象,或者是保留(retain)在一些地方的对象,都需要给他们发送一个release消息。
44、强引用和弱引用
在引用计数之下,一个对象通过保留另一个对象,形成对其的强引用,这确保了被保留的对象保持活的状态,直到保留对象
使用完它并释放它。相反,一个对象通过保留另一个对象的指针而不保留对象本身,形成对另一个对象的弱引用。
45、XCode、Objective-C、Cocoa
XCode:你可以把它看成是一个开发环境,就好像Visual Studio或者Netbeans或者SharpDevelop一样的玩意。你可以将Interface Builder认为是Visual Studio中用来画界面的那部分功能单独提出来的程序。
Objective-C:这是一种语言,就好像c++是一种语言,Java是一种语言,
c#是一种语言,莺歌历史也是一种语言一样。
Cocoa:是一大堆函数库,就好像MFC、.NET、Swing这类玩意,人家已经写好了一堆现成的东西,你只要知道怎么用就可以了。
46、#import、@interface
#import
你可以把它认为是#include,一样的。但是最好用#import,记住这个就行了。
#import指令会自动防止将同一个文件导入多次。
@interface 接口指令
类的接口(in