我是新的目標c 2.0。我碰到這個關鍵字autorelease,我只是需要一些澄清。我想知道是什麼低於目標的代碼的兩行之間的差 - C 2.0(預先感謝):autorelease關鍵字
[UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
[[UIImage imageWithData:[NSData dataWithContentsOfURL:url]] autorelease];
我是新的目標c 2.0。我碰到這個關鍵字autorelease,我只是需要一些澄清。我想知道是什麼低於目標的代碼的兩行之間的差 - C 2.0(預先感謝):autorelease關鍵字
[UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
[[UIImage imageWithData:[NSData dataWithContentsOfURL:url]] autorelease];
自動釋放不是一個關鍵字,這是一個方法,這意味着接到呼叫此特定對象加入到當前的自動釋放池(這通常是由可可創造自己在執行事件)和一次池被耗盡,這個對象將從內存中釋放,所以你不必關心做一個明確的釋放。
如果你沒有這個調用,你必須在完成使用後自行釋放這個對象。
通過使用autorelease你應該確保有一個自動釋放池當前可用,就好像沒有一個對象會泄漏並且它的內存不會被聲明。通常,當你處理來自Cocoa組件的事件時,你可以依賴這個,否則你應該創建你自己的自動發佈池。欲瞭解更多信息,請參閱the oficial Apple documentation about it。
而且,你不應該在你還沒有ALLOC創建的對象調用自動釋放,它是一個基於圖書館有自動釋放對象初始化方法可可共同的行爲,因此,創建一個對象的任何方法,但不包含alloc或copy通常意味着該對象已經被autoreleased並且不應該再次調用它。
第二行是不正確的。 +imageWithData:
已經返回一個自動釋放對象。自動釋放實際上就像是釋放,除非您在對象超出範圍之前仍擁有對象的所有權。閱讀Memory Management Programming Guide獲取更多信息。
另請注意,在ARC中,您將不被允許使用此方法,編譯器會爲您執行此操作。
謝謝你的解釋。我使用xcode分析功能來確定第二行是不正確的。 –
感謝您的解釋。我使用xcode分析功能來確定第二行是不正確的。 –