Objective c @自动释放池语义
我正在llvm网站上阅读ARC文档: …特别是关于@autoreleasepool 在当前许多使用NSAutoreleasePool的实现中,我看到在循环迭代期间池被周期性地耗尽的情况-我们如何使用@autorelease pool来做同样的事情,或者是在某种程度上为我们做的 其次,文档声明,如果抛出异常,池不会被耗尽。。。。ok异常是按名称命名的异常,但如果它们确实发生,您可能希望在不泄漏内存负载的情况下进行恢复。文档没有指定这些对象的发布时间 有人知道这些点的信息吗 我们如何使用@autorelease pool进行同样的操作 像这样:Objective c @自动释放池语义,objective-c,llvm,automatic-ref-counting,Objective C,Llvm,Automatic Ref Counting,我正在llvm网站上阅读ARC文档: …特别是关于@autoreleasepool 在当前许多使用NSAutoreleasePool的实现中,我看到在循环迭代期间池被周期性地耗尽的情况-我们如何使用@autorelease pool来做同样的事情,或者是在某种程度上为我们做的 其次,文档声明,如果抛出异常,池不会被耗尽。。。。ok异常是按名称命名的异常,但如果它们确实发生,您可能希望在不泄漏内存负载的情况下进行恢复。文档没有指定这些对象的发布时间 有人知道这些点的信息吗 我们如何使用@autor
for (int i = 0; i < 10000; i++) {
@autoreleasepool {
// Do your work here
...
}
}
for(int i=0;i<10000;i++){
@自动释放池{
//你在这里工作吗
...
}
}
其次,文档声明,如果抛出异常,池不会被耗尽。。。。ok异常是按名称命名的异常,但如果它们确实发生,您可能希望在不泄漏内存负载的情况下进行恢复
AFAIK这在ARC中是不可能的。ARC一点也不例外安全。如果发生异常,则可能存在不可恢复的内存泄漏。使用ARC的代码不应依赖异常进行错误报告。我们期望在引发异常时,进程无论如何都会崩溃
在当前许多使用NSAutoreleasePool的实现中,我看到在循环迭代期间池被周期性地耗尽的情况-我们如何使用@autorelease pool来做同样的事情,或者是在某种程度上为我们做的
以同样的方式,即通过级联自动释放池。例如:
@autoreleasepool {
…
for (int i = 0; i < MAX; i++) {
@autoreleasepool {
…
}
}
…
}
@autoreleasepool{
…
对于(int i=0;i
其次,文档声明,如果抛出异常,池不会被耗尽。。。。ok异常是按名称命名的异常,但如果它们确实发生,您可能希望在不泄漏内存负载的情况下进行恢复。文档没有指定这些对象的发布时间
在大多数情况下,由于Cocoa中异常的特殊性质,程序无法正常恢复,因此我认为泄漏对象的问题较小。如果由于异常而退出
@autoreleasepool
块,则只有在弹出其中一个封闭的autorelease池时,才会释放相应的autorelease对象。当然,您可以将@try/@catch/@finally
块放在@autoreleasepool
块中以防止这种情况发生。我认为您答案的第二部分不太正确。自动释放池本身在分配时生效的自动释放池中自动释放。只要异常不传播到最外层的自动释放池之外,自动释放的对象就不会泄漏。@bavariable-谢谢您的回答。可以肯定的是,在使用stringWithFormat
时,它会在循环中泄漏内存。