声明property的语法为:
@property (参数1,参数2) 类型 名字;
如:
@property(nonatomic,retain) UIWindow *window;
其中参数主要分为三类:
读写属性: (readwrite/readonly)
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite
产生setter\getter方法
readonly
只产生简单的getter,没有setter。
assign
默认类型,setter方法直接赋值,而不进行retain操作
retain
setter方法对参数进行release旧值,再retain新值。
copy
setter方法进行Copy操作,与retain一样
nonatomic
禁止多线程,变量保护,提高性能
参数类型详解
参数中比较复杂的是retain和copy,具体分析如下:
getter分析
1、
@property(nonatomic,retain)test* thetest; @property(nonatomic ,copy)test* thetest;
等效代码:
-(test*)thetest { return thetest; }
2、
@property(retain)test* thetest; @property(copy)test* thetest;
等效代码:
-(void)thetest { [thetest retain]; return [thetest autorelease]; }
setter分析
1、
@property(nonatomic,retain)test* thetest; @property(retain)test* thetest;
等效于:
-(void)setThetest:(test *)newThetest { if (thetest!= newThetest) { [thetestrelease]; thetest= [newThetest retain]; } }
2、
@property(nonatomic,copy)test* thetest; @property(copy)test* thetest;
等效于:
-(void)setThetest:(test *)newThetest { if (thetest!= newThetest) { [thetestrelease]; thetest= [newThetest copy]; } }