2011-08-17 109 views
2

我是新的目標c 2.0。我碰到這個關鍵字autorelease,我只是需要一些澄清。我想知道是什麼低於目標的代碼的兩行之間的差 - C 2.0(預先感謝):autorelease關鍵字

  1. [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

  2. [[UIImage imageWithData:[NSData dataWithContentsOfURL:url]] autorelease];

回答

3

自動釋放不是一個關鍵字,這是一個方法,這意味着接到呼叫此特定對象加入到當前的自動釋放池(這通常是由可可創造自己在執行事件)和一次池被耗盡,這個對象將從內存中釋放,所以你不必關心做一個明確的釋放。

如果你沒有這個調用,你必須在完成使用後自行釋放這個對象。

通過使用autorelease你應該確保有一個自動釋放池當前可用,就好像沒有一個對象會泄漏並且它的內存不會被聲明。通常,當你處理來自Cocoa組件的事件時,你可以依賴這個,否則你應該創建你自己的自動發佈池。欲瞭解更多信息,請參閱the oficial Apple documentation about it

而且,你不應該在你還沒有ALLOC創建的對象調用自動釋放,它是一個基於圖書館有自動釋放對象初始化方法可可共同的行爲,因此,創建一個對象的任何方法,但不包含alloc或copy通常意味着該對象已經被autoreleased並且不應該再次調用它。

+0

感謝您的解釋。我使用xcode分析功能來確定第二行是不正確的。 –

3

第二行是不正確的。 +imageWithData:已經返回一個自動釋放對象。自動釋放實際上就像是釋放,除非您在對象超出範圍之前仍擁有對象的所有權。閱讀Memory Management Programming Guide獲取更多信息。

另請注意,在ARC中,您將不被允許使用此方法,編譯器會爲您執行此操作。

+0

謝謝你的解釋。我使用xcode分析功能來確定第二行是不正確的。 –