簡體   English   中英

[NSMutableArray數組]與[[NSMutableArray alloc] init]之間的區別

[英]Difference between [NSMutableArray array] vs [[NSMutableArray alloc] init]

可以有人告訴我聲明一個可變數組的區別:

NSMutableArray *array = [NSMutableArray array];

NSMutableArray *array = [[NSMutableArray alloc] init];

因為在開始時我用alloc來聲明我的所有數組,如果在某個函數的最后我返回了使用alloc創建的數組,我必須自動釋放該數組,因為內存泄漏問題。

現在使用第一個聲明我不需要發布任何內容。

謝謝

array類方法本身會生成一個自動釋放的數組,這意味着您不必(也不應該)手動釋放它。

因為在開始時我用alloc聲明我的所有數組,如果在某個函數的最后我返回了使用alloc創建的數組,我必須自動釋放該數組,因為內存泄漏問題。 現在使用第一個聲明我不需要發布任何內容

當你“拋售”一個物體時,這是完全正確的。 但在其他情況下,當您在iOS上創建一個對象時,您可以在獲取現成的自動釋放對象和調用alloc然后釋放之間做出選擇,Apple希望您使用alloc和release,因為這樣可以保持對象的生命周期簡短而且在你的控制之下。

這里的問題是自動釋放的對象存在於自動釋放池中,並且可以堆積直到池被耗盡,無論何時可能。

另外需要注意的是循環。 您可能會在不知情的情況下生成自動釋放的對象,並且它們只會堆積在池中。 解決方案是在循環開始時創建自己的自動釋放池,並在循環結束時釋放它,以便每次通過循環釋放對象。

編輯 - 12/18/2011:但是隨着iOS 5和ARC的到來,自動釋放機制效率更高,並且沒有release這樣的東西,所以alloc-init和便利構造函數之間的區別是自動釋放的對象變得沒有實際意義 (它現在是@autoreleasepool塊而不是自動釋放池(偽)對象。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM