2010-02-03 17 views
3

這些日期指針中的任何一個或兩個都需要[釋放],當我完成它們。我怎麼知道這個?我不確定,因爲我沒有明確地做init。如何知道何時發佈NSDate對象?

NSDate *date = [NSDate date]; 

NSDate *date = [dateWithTimeIntervalSince1970:100000000]; 

回答

5

兩者都是autoreleased,也就是說你不需要自己釋放它們。經驗法則是,你擁有一個對象,如果您發送+頁頭或-copy或明確保留它:

  • [SomeClass的頁頭]初始化...]
  • [someObject副本]
  • [一些對象保留]

如果你擁有一個對象,你必須釋放它。 + new是+ alloc和-init的快捷方式。

+0

好吧,但它釋放它不正確?如果我沒有明確這樣做,它何時能夠獲得釋放? – glutz78 2010-02-03 15:02:30

+0

是的,釋放你不屬於自己的物體是錯誤的。這被稱爲「過度釋放」,當-release(或任何其他消息)被髮送到一個已經發布的對象時,會導致崩潰。當封閉的NSAutoreleasePool被釋放/耗盡時(如果你沒有明確地使用它們,這發生在事件循環的每個循環的末尾),實際上釋放自動釋放的對象。請參閱「Cocoa內存管理編程指南」。 – Costique 2010-02-04 12:22:10

5

不,這些方法的返回日期都是自動發佈的。你不需要擔心自己的記憶管理,儘管要成爲一個好公民,當你完成這些任務時將指針設置爲零將是一個好主意。

作爲一般規則,您可以遵循我所謂的「CARN」規則。在Cocoa/Cocoa Touch中,任何包含複製,Alloc,保留,的新方法都會返回需要在某個時間點釋放的對象。這些命名約定適用於返回保留數爲+1的對象的方法。調用這些方法的類「擁有」該對象,並負責在它完成時釋放該對象。

希望這會有所幫助。

相關問題