2012-01-14 60 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

相关问题