比方說,我有一個循環,返回一串自動釋放的NSData對象...在ARC下,爲循環創建@autoreleasepool還是可取的嗎?
NSData* bigData = ...
while(some condition) {
NSData* smallData = [bigData subdataWithRange:...];
//process smallData
}
根據ARC,我應該還是環繞while
條件的@autoreleasepool
?
NSData* bigData = ...
@autoreleasepool {
while(some condition) {
NSData* smallData = [bigData subdataWithRange:...];
//process smallData
}
}
爲什麼我問的原因是我看到的儀器穿過屋頂爲調用dataWith...
方法,而不是一個initWith...
方法我的NSData對象生活的分配數。當我使用initWith...
時,生存分配數量非常少得多。
只要有可能就更喜歡initWith...
方法嗎?
感謝您的好鏈接! –
Per @ Chuck的回答:@autoreleasepool需要在*循環內部執行任何操作。成語是'while(x)@autoreleasepool {...}',而不是'@autoreleasepool {while(x){...}}'。 – Quuxplusone
這是過度簡化和不正確的。 ARC通常可以優化使用autorelease pool來返回+0對象的方法(這是使用'autorelease'最常用的方法)。 –