问题描述
假设我有一个循环,该循环返回一堆自动释放的NSData对象...
Let's say that I have a loop that returns a bunch of autoreleased NSData objects...
NSData* bigData = ...
while(some condition) {
NSData* smallData = [bigData subdataWithRange:...];
//process smallData
}
在ARC下,我是否还应该在while
条件周围包裹一个@autoreleasepool
?
Under ARC, should I still wrap an @autoreleasepool
around the while
condition?
NSData* bigData = ...
@autoreleasepool {
while(some condition) {
NSData* smallData = [bigData subdataWithRange:...];
//process smallData
}
}
我问的原因是我看到了我的NSData对象通过屋顶的仪器中的动态分配计数,这些对象调用dataWith...
方法而不是initWith...
方法.当我使用initWith...
时,生活分配的数量要少得多.
The reason why I'm asking is I see the living allocation count in instruments going through the roof for my NSData objects that invoke a dataWith...
method as opposed to an initWith...
method. When I use initWith...
, the living allocation count is much, much less.
是否最好尽可能使用initWith...
方法?
Is it better to prefer the initWith...
methods whenever possible?
推荐答案
是的,在紧密循环中使用便捷方法时,仍应使用自动释放池.所有旧的内存管理规则仍然适用于ARC,编译器只是为您注入RR.查看真棒Mike Ash的精彩文章!
Yes you should still use autorelease pools when using convenience methods in a tight loop. All the old memory management rules still apply under ARC, the compiler is merely injecting RRs for you. Checkout the great post by the awesome Mike Ash!
这篇关于在ARC下,是否仍建议为循环创建@autoreleasepool?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!