木先生

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

oc中内存管理的三项原则:

1. 谁创建(new 或者 alloc),谁release。

2. 如果你从一个方法中获得一个对象,应该假设这个对象的retaincount是1,而且已经被设置为autorelease,你不需要,也不应该release它。如果需要进一步传递这个对象,你可以进行retain或者copy操作。

3. 如果你retain了一个对象,你必须负责release它。

 

另外再补充一下。仔细查阅了release方法的定义,它被定义为oneway。这个关键字的意思是方法的调用不需要返回任何消息,方法的返回也不保证方法已经执行完毕。也就是说,当你调用了[obj release]之后,retainCount不一定会立即做出反应。所以retainCount是不可靠的,除非你愿意sleep一段时间来等待release完成。

 

再一点,对于类的属性,如果通过@property(retain)定义,最好在释放的时候,同时做两件事,1,release它,2,通过setter设置其为nil。以避免这个指针指向内存的随意位置,造成混乱。

 

要补充的第三点,就是在使用类似工厂方法返回一个创建的对象时,一定要以以下方式返回对象:

return [product autorelease];

 

posted on 2012-03-13 10:32  一十一王  阅读(415)  评论(0编辑  收藏  举报