gpt4 book ai didi

objective-c - @autoreleasepool 语义

转载 作者:太空狗 更新时间:2023-10-30 03:36:29 26 4
gpt4 key购买 nike

我正在阅读 llvm 站点上的 ARC 文档:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool

..特别是关于@autoreleasepool。

在许多当前使用 NSAutoreleasePool 的实现中,我看到在循环迭代期间池被定期排空的情况 - 我们如何使用 @autorelease pool 做同样的事情,或者这一切都是在幕后以某种方式为我们完成的?

其次,文档声明如果抛出异常,则不会耗尽池....好吧,从名称上看,异常是异常的,但如果确实发生了,您可能希望在不泄漏大量内存的情况下进行恢复。文档没有指定何时释放这些对象。

有人知道关于这些点的任何信息吗?

最佳答案

In lot of current implementation using NSAutoreleasePool, I see cases where the pool is drained periodically during a loop iteration - how do we do the same with @autorelease pool, or is it all done for us somehow under the hood?

以同样的方式,即通过级联自动释放池。例如:

@autoreleasepool {

for (int i = 0; i < MAX; i++) {
@autoreleasepool {

}
}

}

Secondly, the docs state that if an exception is thrown, the pool isn't drained.... ok exceptions are by name exceptional, but if they do happen, you might like to recover without leaking a load of memory. The docs don't specify when these objects will be released.

在大多数情况下,由于 Cocoa 中异常的特殊性质,程序将无法正常恢复,所以我认为泄漏对象是一个较小的问题。如果 @autoreleasepool block 因为异常而退出,相应的自动释放对象只有在封闭的自动释放池之一弹出时才会被释放。但是,您当然可以将 @try/@catch/@finally block 放在 @autoreleasepool block 中以防止这种情况发生。

关于objective-c - @autoreleasepool 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7804696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com