7

我的意思是,如果我绝对确定我没有创建任何自动释放的对象,那么当然不会。我真正关心的是引擎盖下是否还有其他我不明白的地方。我有一个调用函数的后台线程。我必须始终创建一个自动释放池吗?

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

2 回答 2

2

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

祝你好运!

于 2011-02-21T04:08:20.010 回答
1

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

示例 1

如果您正在与 Foundation 或其他 objc 类型进行交互,则应该这样做。毫无疑问。

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

示例 2

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

底线

  • 可能需要很长时间才能了解哪里需要(或不需要)。

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

  • 您应该保证永远不会引入泄漏,尤其是出于如此简单的原因。

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

于 2011-02-21T04:50:48.970 回答