oc内存管理代码规范和property于对象变量的用法
1.只要调用了alloc ,必须有release (autorelease)
2.set方法的代码规范:
基本类型:
- (void)setAge:(int)age { _age = age; }
oc对象类型:
- (void)setCar:(Car *)car { if(_car != car) //判断是不是新对象 { //如果是新对象,就对旧对象-1,因为person对象销毁时(dealloc)会让car对象-1,旧对象没有机会了,所以在这里-1 [_car release]; _car = [car retain]; // 对新对象 +1 } }
在h文件中写 property(retain)Car *car; 等效于上面的代码
3.dealloc 方法的代码规范 (对象销毁前调用的方法)(重写时)
~一定要[super dealloc],并且放到最后面
~对self 所拥有的其他对象做一次release (比如上面的person拥有的car)
-(void)dealloc { [_car release]; [super dealloc]; }
NSString *s = "hello"; 字符串对象不用release 因为他自己会自动release
错误:
person *p = [[Car alloc]init]; 不能这么写 ,因为有了alloc不能release
property 中set方法内存管理的相关参数:
retain : release旧值 ,retain新值 (用于oc对象类型) @property (retain) Car *car;
assign: 直接赋值(默认,适用于非oc对象类型) @property (assign) int age //默认的
copy : release 旧值,copy新值
----是否要生成set方法:(只读)
readonly : 只会生成getter的声明、实现
readwrite :同时生成setter和getter的声明和实现
----多线程管理
nonatomic : 性能高
atomic : 性能低(默认)
----setter和getter方法的名称 (getter =abc ,setter = setAbc:)