释放返回的对象或我必须使用自动释放

时间:2011-10-26 15:05:12

标签: objective-c release autorelease retaincount

示例代码:

- (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中释放返回的对象吗?

2 个答案:

答案 0 :(得分:0)

在您将所有权移交给调用代码时,此实例中的代码应自动释放您的对象,您不再希望在方法中对其负责,因此您应该放弃对其的保留。

记住NARC - 假设以这些关键字开头的方法不是自动释放...

New,Alloc,Retain,Copy

如果您的方法被命名为newFoocopyFoo,那么上面的代码就可以了,无需自动释放。

答案 1 :(得分:0)

可可内存管理实际上非常简单,因为每个人都遵守一套规则。你没有遵守这些规则,所以你会遇到麻烦。

阅读Basic Memory Management Rules。如果你坚持遵守这些规则,你应该没事。