【问题标题】:How do drain current auto release pool?如何耗尽当前的自动释放池?
【发布时间】:2017-05-31 05:24:25
【问题描述】:

通常,我们调用@autoreleasepool 来清空ARC 中的自动释放池。

@autoreleasepool {
    MyObject* object = [[MyObject alloc] init];
}
//do something

现在我希望在调用 MyFunction 时清空所有 MyObject 对象。

- (void)MyFunction
{
    //[[NSAutoReleasePool defaultAutoReleasePool] drain];
    //do something
}

我知道@autoreleasepool 创建了一个新池。我只想要MyFunction 排空默认池或当前池,这样可以确保自动释放池中所有未使用的MyObject 在常见情况下被排空。

这可能吗?

【问题讨论】:

    标签: objective-c nsautoreleasepool


    【解决方案1】:

    @autoreleasepool { ... } 创建和删除(排出)一个新的自动释放池。您不能手动排空当前的自动释放池。有时可能需要释放池中的对象。在这种情况下,您应该使用嵌套池,例如:

    @autoreleasepool { // Initial pool
        ...
        for(...) {
            @autoreleasepool {
                // Using large amount in ARP
            }
        }
        ...
    }
    

    顺便说一句:您的第一个列表中的对象不是 ARP 的成员,因为它是 alloc-init 调用的结果,因此您拥有它的所有权(请参阅 Memory Management Rules)。

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多