标签:
MRC(手动管理内存):
1、如果使用了alloc、new、copy、retain必须使用release、autorelease来释放这个内存
2、alloc产生一个新对象,把新对象的引用计数器设置为1,retain保留对象,使对象的引用计数器+1,release使对象的引用计数器-1
3、当对象的引用计数器变成0,就会调用dealloc函数,对象释放内存
4、对象创建的时候计数器=1,retain,计数器+1,release,计数器-1,加入数组计数器+1,数组删除对象引用计数器-1
5、property中的三个关键字assign、retain、copy、strong、weak修饰的变量的setter写法
assign:-(void)setCar:(Car*)car {
_car = car;
}
retain:-(void)setCar:(Car*)car{
if(_car != car){
[_car release];
_car = [car retain];
}
} copy只是将retain改成copy,被定义有copy属性的对象必须要符合NSCopying协议,并实现必须实现的方法,copy不对原引用计数器的值改变,生成一个新的对象,引用计数器=1
strong:相当于retain,weak相当于assign 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。不过strong、weak只能修饰对象。
ARC使用机制:不能调用dealloc,不能重写和调用retain,release,retainCount 和autorelease,同理,@selector(retain),@selector(release)这些曲线救国的方法也不能调用。 dealloc虽然能够重写,但是不能调用[super dealloc]之类的方法
标签:
原文地址:http://www.cnblogs.com/xiaonizicome/p/5435813.html