想一个对象中 连续两次set某个对象,会造成先set的对象 没有release,造成内存没有释放。
1 /* 2 内存管理代码规范: 3 1.只要调用了alloc,必须有release(autorelease) 4 对象不是通过alloc产生的,就不需要release 5 6 2.set方法的代码规范 7 1> 基本数据类型:直接复制 8 - (void)setAge:(int)age 9 { 10 _age = age; 11 } 12 13 2> OC对象类型 14 - (void)setCar:(Car *)car 15 { 16 // 1.先判断是不是新传进来对象 17 if ( car != _car ) 18 { 19 // 2.对旧对象做一次release 20 [_car release]; 21 22 // 3.对新对象做一次retain 23 _car = [car retain]; 24 } 25 } 26 27 3.dealloc方法的代码规范 28 1> 一定要[super dealloc],而且放到最后面 29 2> 对self(当前)所拥有的其他对象做一次release 30 - (void)dealloc 31 { 32 [_car release]; 33 [super dealloc]; 34 } 35 */
不管对象是怎么产生的,只要没有alloc,就不需要写release;例如:
NSString *s = @"oc";
在类的声明中使用
1 @property (retain) Book *book;
就想当于告诉编译器,set方法中生成如下代码:
1 - (void)setBook:(Book *)book 2 { 3 if(book != _book){ 4 [_book release]; 5 6 _book = [book retain]; 7 } 8 9 }
而不是单纯的生成
- (void)setBook:(Book *)book { _book = book; }