如果我不创建自动发布的对象,是否需要autorelease池?

我的意思是,如果我确定我没有创建任何autoreleased对象,那当然不会。 我真正担心的是,如果还有其他事情我不明白。 我有一个调用函数的后台线程。 我必须总是创建一个autorelease池吗?

- (void)someFuncOnABackgroundThread
{
    //don't seem to need this. no leaks found
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    //do something that doesn't create any objects, or only use alloc/init/release

    NSString* str = [[NSString alloc] init];
    [str release];
    [pool drain];
}

最终,它取决于你在实现中使用的接口。

例子1

如果你正在与基金会或其他objc类型进行交互,你应该。 毫无疑问。

回答具体到你发布的例子:在这种情况下绝对要创建一个 - NSString apis应该假设一个autorelease池已经到位。

例2

如果你完全用libc处理apis,那就没有必要。

底线

  • 可能需要花费很多时间来了解哪里是必要的(或不是)。

  • 实现可以改变,他们可以引入自动发布的对象。

  • 你应该保证泄漏永远不会被引入,特别是出于这样一个简单的原因。

  • 这是一个简单的问题要克服:如果有疑问,请创建一个。


  • 是的! 你必须。 你可能正在调用一个内部使用autorelease池的函数,所以你永远不知道你是否使用autorelease。

    祝你好运!

    链接地址: http://www.djcxy.com/p/50931.html

    上一篇: Is an autorelease pool necessary if I'm not creating autoreleased objects?

    下一篇: Android EditText and addTextChangedListener