0

示例代码:

- (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];
}

问题:我必须在 createFoo 中自动释放还是可以在 someOtherMethod 中释放返回的对象?

4

2 回答 2

0

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

阅读基本内存管理规则。如果你坚持遵守这些规则,你应该没问题。

于 2011-10-26T15:16:29.990 回答
0

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

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

新建、分配、保留、复制

如果您的方法被命名newFoo,或者copyFoo您上面的代码没有自动发布就可以了。

于 2011-10-26T15:11:11.977 回答