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