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