1、循环引用和总结(内存管理的经典问题)code
对象A retain对象B,同时对象B retain对象A。这时两个对象A和B都没有办法获得释放。这种状况咱们称之循环引用。以下示:
对象
//B类中设置A - (void)setA:(A *)a { if(_a != a) { [_a release]; _a = [a retain]; } } - (void)dealloc { [_a release]; [super dealloc]; } |
//A类中设置B - (void)setB:(B *)b { if(_b != b) { [_b release]; _b = [b retain]; } } - (void)dealloc { [_b release]; [super dealloc]; } |
2、内存管理总结内存
当你使用new、alloc或copy方法建立一个对象时。该对象的引用计数为1。当不在使用该对象时,你要负责向该对象发送一条release或者autorelease消息。这样,该对象将在其使用对象结束时销毁。
内存管理
你经过任何其余方法得到一个对象时,则假设该对象的引用计数为1,并且已经被设置为自动释放,你不须要执行任何方法来释放对象。若是你打算在一段时间内拥有该对象,则须要保留它并确保在操做完成时释放它。
table
若是你保留了某个对象,你须要释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。
class
除了alloc、new或copy以外的方法建立对象都被声明了autorelease。谁retain,谁release。只要你调用了retain,不管这个对象是如何生成的,你都要调用release。
循环