调用如何以不同的方式保留在同一个对象上?

时间:2012-01-14 02:02:12

标签: iphone objective-c ios

我想知道以下两点之间的区别:

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

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

我有一些复杂的数据流项目,我必须返回不同的NSMutableArrays。 我也想知道返回NSMutableArrays的最佳方法是什么。

2 个答案:

答案 0 :(得分:2)

除了您希望代码格式化之外没有区别。

这可行的原因在于NSObject

的文档中
  

为方便起见,retain返回self,因为它可以在嵌套表达式中使用。

因此retain返回被调用的对象(在你的情况下是一个可变数组),这意味着你可以嵌套方法或只是在你的例子中使用赋值中的返回值。


要从方法返回值,您应确保它是autorelease'd

所以使用你的代码段

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

    // ... do some work

    return myArray;
}

由于方法returnMutableArray不包含关键字allocnewcopy,因此应该返回autorelease'd对象。现在,当我们在方法结束时返回对象时,我们不需要再进行任何保留,因为它将准备好返回。

如果您对内存管理不确定,请阅读Advanced Memory Management Guide或(最好)开始使用ARC

答案 1 :(得分:1)

1和2之间没有区别。

iOS上的最佳做法是从方法中返回自动释放的对象,并且不需要保留它们。

如果您对保留和发布的工作方式感到困惑,您可能只需在项目中启用ARC,它会自动为您管理保留和释放。