如何排出当前的自动释放池?

时间:2017-05-31 05:24:26

标签: objective-c nsautoreleasepool

通常,我们会调用@autoreleasepool来消耗ARC中的自动释放池。

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

现在,当我致电MyObject时,我希望所有MyFunction个对象耗尽。

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

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

这可能吗?

1 个答案:

答案 0 :(得分:0)

@autoreleasepool { ... }创建并删除(清除)新的自动释放池。您无法手动耗尽当前的自动释放池。有时可能需要释放池中的对象。在这种情况下,您应该使用嵌套池,例如:

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

BTW:你的第一个列表中的对象不是ARP的成员,因为它是alloc - init调用的结果,因此你拥有它的所有权(参见{ {3}})。