示例代码:
- (Foo*)createFoo {
Foo *foo = [[Foo alloc] init];
return foo;
}
- (void)someOtherMethod {
Foo *foo;
foo = [self createFoo]; //retain count 1
[foo release]; //retain count = 0 => object gets released?
//repeat
foo = [self createFoo];
[foo release];
}
Qeustion(也许是一个愚蠢的):我是否必须在createFoo中自动释放或者我可以在someOtherMethod中释放返回的对象吗?
答案 0 :(得分:0)
在您将所有权移交给调用代码时,此实例中的代码应自动释放您的对象,您不再希望在方法中对其负责,因此您应该放弃对其的保留。
记住NARC - 假设以这些关键字开头的方法不是自动释放...
New,Alloc,Retain,Copy
如果您的方法被命名为newFoo
或copyFoo
,那么上面的代码就可以了,无需自动释放。
答案 1 :(得分:0)
可可内存管理实际上非常简单,因为每个人都遵守一套规则。你没有遵守这些规则,所以你会遇到麻烦。
阅读Basic Memory Management Rules。如果你坚持遵守这些规则,你应该没事。