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];