类方法实例范围?

fuz*_*oat 0 cocoa objective-c

我的问题是关于在+ planet中创建的对象的范围.我被告知"自动释放的对象将在它们创建的方法/函数的持续时间内保持不变"在我的示例中,我假设行星实例的范围在main()内,而不是在我执行的方法中初始的alloc/init?

+(Planet *) planet {
    gPlanetCount++;
    return [[[self alloc] init] autorelease];
}

int main(int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    Planet *outerMost;

    outerMost = [Planet planet];
    ...
    ... some code
    ...
    [pool drain];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

EDIT_001

int main(int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    Planet *outerMost;

    outerMost = [[Planet planet] retain]; // Added retain
    ...
    ... some code
    ...
    [outerMost release]; // Added release
    [pool drain];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

加里

Alf*_*nso 5

自动释放的对象始终有效,直到周围的NSAutoreleasePool耗尽.在您的示例中,这涵盖了主要方法.

通常,自动释放的对象在运行循环结束时释放.因此,如果您调用一个返回自动释放对象的方法,它在您的函数体中仍然有效,直到您手动排空周围的NSAutoreleasePool或从运行循环中调用的方法返回.