这一天主要学习了内存管理的部分,感觉稍显复杂,但只要遵循总的原则就不会错
谁声明,谁销毁,谁retain,谁release
1.在类的成员变量是oc对象时,set方法需要写内存管理如
-(void)setBook:(Book *)book{
if( _book != book){
[_book release];
_book = [book retain];
}
}
还要在调用这个set方法的类的dealloc方法中,加入[_book release]
在声明该对象成员变量的属性时,加入retain关键字,就可以代替上述内容
@propety 还有readonly,readwrite,assgin,retain,copy,atomic,nonatomic等关键字
atomic是原子性,即给该方法加上线程锁,在一个线程尚未执行完毕时不允许另外一个线程调用,耗费了系统安全,nonatomic即禁止了多线程
2.@class关键字 在对象与对象相互引用成员变量时使用,代替引入.h文件,提高了编译效率
3.autorelease延迟释放,使用autorelease声明时,会把该变量加入autoreleasepool的栈顶,等该池释放的时候,pool的所有变量都调用一次release方法,一般静态方法声明的变量都是autorelease,循环量比较大的语句不要加入autoreleasepool,而且在arc中模式中不能使用autorelease方法
原文地址:http://8365137.blog.51cto.com/8355137/1588785