oc的内存管理。在于属性的定义,
- 声明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];}}