2

我有一个关于 Objective-c 中的内存管理和方法调用的非常简单的问题。

想象一下我有:

- (void)someFunction
{
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Value 1", nil];
    [self someOtherFunction:array];
}

- (void)someOtherFunction:(NSMutableArray *)array
{
    // Should I retain array here?
    [array addObject:@"Value 2"];
    // And then release ?
}

这是一个简单的示例,但假设我们有 10 个具有相同对象参数的方法调用。什么是最好的解决方案?

4

2 回答 2

1

如果您是所有的皮带和大括号,或者正在用线程做很多奇怪的事情,那么您可能应该在每个方法调用中保留/释放。事实上,这正是 ARC 在幕后为您所做的。(据我所知,它没有记录,并且可能会因版本而异。)

而且,当然,按照您的建议保留/释放不会造成任何伤害。在实践中,它不太可能增加很多开销。

说了这么多:大多数人添加保留/释放。如果您的代码都在主线程上运行,那么在执行方法时您的对象不太可能被释放。

于 2012-10-03T08:15:18.347 回答
0

(这解释了禁用 ARC 时的引用计数)

使用便捷构造函数时,返回的对象作为自动释放对象返回。

自动释放意味着在当前运行循环结束时,对象的引用计数将减少 1。如果从创建到此时对象没有保留,则意味着它将被释放。

这意味着在您的代码中您不需要添加任何保留/释放调用,因为该对象将一直存在到您的someFunction方法结束。

如果在您的someFunction方法结束时您需要保持数组存在,例如在实例变量中,您可以使用以下方法保留它:

_myInstanceVar = [array retain]; // don't forget to release it in dealloc method
于 2012-10-03T08:14:07.837 回答