如何耗尽当前的自动释放池?
Posted
技术标签:
【中文标题】如何耗尽当前的自动释放池?【英文标题】: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
在常见情况下被排空。
这可能吗?
【问题讨论】:
【参考方案1】:@autoreleasepool ...
创建和删除(排出)一个新的自动释放池。您不能手动排空当前的自动释放池。有时可能需要释放池中的对象。在这种情况下,您应该使用嵌套池,例如:
@autoreleasepool // Initial pool
...
for(...)
@autoreleasepool
// Using large amount in ARP
...
顺便说一句:您的第一个列表中的对象不是 ARP 的成员,因为它是 alloc
-init
调用的结果,因此您拥有它的所有权(请参阅 Memory Management Rules)。
【讨论】:
以上是关于如何耗尽当前的自动释放池?的主要内容,如果未能解决你的问题,请参考以下文章
当自动释放池耗尽时,NSFileAttributes dealloc 中的 SIGSEGV SEGV_ACCERR 崩溃?