我想知道以下两点之间的区别:
NSMutableArray *myArray = [[someObject returnMutableArray] retain];
和
NSMutableArray *myArray = [someObject returnMutableArray];
[myArray retain];
我有一些复杂的数据流项目,我必须返回不同的NSMutableArrays。 我也想知道返回NSMutableArrays的最佳方法是什么。
答案 0 :(得分:2)
除了您希望代码格式化之外没有区别。
这可行的原因在于NSObject
的文档中为方便起见,retain返回self,因为它可以在嵌套表达式中使用。
因此retain
返回被调用的对象(在你的情况下是一个可变数组),这意味着你可以嵌套方法或只是在你的例子中使用赋值中的返回值。
要从方法返回值,您应确保它是autorelease
'd
所以使用你的代码段
- (NSMutableArray *)myMethod;
{
NSMutableArray *myArray = [someObject returnMutableArray];
// ... do some work
return myArray;
}
由于方法returnMutableArray
不包含关键字alloc
,new
或copy
,因此应该返回autorelease
'd对象。现在,当我们在方法结束时返回对象时,我们不需要再进行任何保留,因为它将准备好返回。
如果您对内存管理不确定,请阅读Advanced Memory Management Guide或(最好)开始使用ARC
答案 1 :(得分:1)
1和2之间没有区别。
iOS上的最佳做法是从方法中返回自动释放的对象,并且不需要保留它们。
如果您对保留和发布的工作方式感到困惑,您可能只需在项目中启用ARC,它会自动为您管理保留和释放。