如果我不创建自动释放的对象,是否需要自动释放池?

时间:2011-02-21 04:03:55

标签: iphone ios memory-management nsautoreleasepool

我的意思是,如果我绝对肯定我没有创建任何自动释放的对象,那么它当然不会。我真正担心的是,如果还有其他任何内幕我不明白。我有一个调用函数的后台线程。我是否必须始终创建一个自动释放池?

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

2 个答案:

答案 0 :(得分:3)

是的!你必须。您可能正在调用一个内部使用自动释放池的函数,因此您永远不会知道您是否正在使用自动释放。

祝你好运!

答案 1 :(得分:1)

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

示例1

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

回答您发布的示例:在这种情况下肯定创建一个 - NSString apis应该假定自动释放池已到位。

示例2

如果你在libc中完全处理apis,则没有必要。

底线

  • 可能需要花费大量时间来了解必要(或不需要)的位置。

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

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

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