声明property的语法为:
@property (参数1,参数2) 类型 名字;
如:
@property(nonatomic,retain) UIWindow *window;
其中参数主要分为三类:
读写属性: (readwrite/readonly)
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite: 产生settergetter方法
readonly: 只产生简单的getter,没有setter。
assign: 默认类型,setter方法直接赋值,而不进行retain操作
retain: setter方法对参数进行release旧值,再retain新值。
copy: setter方法进行Copy操作,与retain一样
nonatomic: 禁止多线程,变量保护,提高性能
@property的参数:
(1)set 方法内存管理相关的参数
(a)retain:release 旧值,retain 新值(适用于 OC对象类型)
(b)assign:直接赋值(默认,适用于非OC对象类型), 常用在 BOOL 、int 等基本数据类型。
(c)copy:release 旧值,copy新值, 常用在 NSString对象
(2)是否要生成 set 方法
(a)readwriter:同时生成set和get方法的声明和实现
(b)readonly:只生成 get的声明和实现
(3)多线程管理
(a)nonatomic:性能高(一般都是使用这个)
(b)atomic:性能低(默认)
(4)set 和 get 方法的名称
(a)setter:决定了 set 方法的名称,一定要加个冒号“:“
(b)getter:决定了 get 方法的名称,不要加冒号
(5)strong 和 weak
(a) strong: 用于一般对象
(b) weak: 用于UI控件
id万能指针
Person *p = [Person new];
相当于:
id p = [Person new];
注意 id 和 p 之间不要再加了,id 中默认就带了。