有人可以告訴我使用以下方法聲明可變數組的區別:NSMutableArray *array = [NSMutableArray array];和NSMutableArray *array = [[NSMutableArray alloc] init];因為一開始我是用alloc聲明我的所有數組,并且如果在某個函數的結尾我返回了用alloc創建的數組,則由于內存泄漏問題,我不得不自動釋放該數組。現在使用第一個聲明,我不需要釋放任何內容。謝謝
3 回答

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
因為一開始我是用alloc聲明我的所有數組,如果在某個函數的末尾我返回了用alloc創建的數組,則我必須自動釋放該數組,因為內存泄漏問題?,F在使用第一個聲明,我不需要釋放任何內容
當您“出售”一個對象時,這是完全正確的。但是在其他情況下,當您在iOS上創建對象時,可以在獲取現成的自動釋放對象和調用alloc之后再釋放之間進行選擇,Apple希望您使用alloc和release,因為這樣可以保持對象的生命周期短,由您控制。
這里的問題是,自動釋放的對象駐留在自動釋放池中,并且可能一直堆積到池耗盡為止。
需要注意的另一件事是循環。您可能會在不知不覺中生成自動釋放的對象的情況下,它們只是堆積在池中。解決方案是在循環開始時創建自己的自動釋放池,并在循環結束時釋放它,以便每次通過循環都釋放對象。
但是隨著iOS 5和ARC的到來,自動釋放機制更加有效,并且沒有諸如之類的東西release
,因此alloc-init和出售自動釋放對象的便利構造函數之間的區別變得模擬。(現在它也是一個@autoreleasepool
塊,而不是一個自動釋放池(偽)對象。)
添加回答
舉報
0/150
提交
取消