2012-01-14 59 views
0

我想知道以下兩個區別:在同一對象工作中,調用如何以不同方式保留?

NSMutableArray *myArray = [[someObject returnMutableArray] retain]; 

NSMutableArray *myArray = [someObject returnMutableArray]; 
[myArray retain]; 

我有,我有返回不同的NSMutableArrays一些複雜的數據流項目。 我也想知道什麼是返回NSMutableArrays的最佳方式。

回答

1

有1和2

iOS上最好的做法沒有區別是從方法返回自動釋放的對象,應該沒有必要保留它們。

如果您對如何保留和釋放工作感到困惑,則應該在您的項目中啓用ARC,該項目會自動管理保留和釋放。

2

除了您希望您的代碼格式化之外沒有任何區別。

這部作品的原因是在文檔中的NSObject

爲方便起見,保留收益的自我,因爲它可以在嵌套的表達式中使用。

retain因此返回一個被要求(在你的情況下的可變數組),這意味着可以巢方法或簡單地使用返回值的賦值,因爲你在你的例子有對象。


對於從方法返回的值,你應該確保它是autorelease

因此,使用您的片段

- (NSMutableArray *)myMethod; 
{ 
    NSMutableArray *myArray = [someObject returnMutableArray]; 

    // ... do some work 

    return myArray; 
} 

倒是因爲returnMutableArray不包含方法關鍵字的allocnewcopy應該返回一個autorelease'd對象。現在,當我們在方法結束時返回對象時,我們不需要進一步保留,因爲它將準備好返回。

如果你在內存管理不確定你應該閱讀Advanced Memory Management Guide或(最好)開始使用ARC

相關問題