objective-c 編程總結 內存管理

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章