我有一个关于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个方法调用具有相同的对象参数。 什么是最好的解决方案?
答案 0 :(得分:1)
如果你是所有的腰带和大括号,那么你应该在每个方法调用中保留/释放。事实上,这正是ARC在幕后为您所做的事情。 (据我所知,它没有记录,可能会因版本而异。)
当然,如你所说,保留/释放不会造成任何伤害。在实践中,它不太可能增加很多开销。
说了这么多:大多数人不添加保留/释放。如果您的代码全部在主线程上运行,那么在您执行方法时,您的对象不太可能被释放。
答案 1 :(得分:0)
(这解释了ARC被禁用时的参考计数)
使用便捷构造函数时,返回的对象将作为自动释放的对象返回。
Autorelease意味着在当前runloop的末尾,对象的引用计数将减少1.如果对象未从创建中保留到此点,则意味着它将被释放。
这意味着在您的代码中,您不需要添加任何保留/释放调用,因为对象将一直存在,直到someFunction
方法结束。
如果在someFunction
方法结束时需要保持数组生存,例如在实例变量中,您可以使用以下方法保留数组:
_myInstanceVar = [array retain]; // don't forget to release it in dealloc method