是否有必要在Swift程序中使用autoreleasepool?它說,在WWDC14演示文稿的第17頁上使用Objective-C?還是要管理自動釋放池autoreleasepool {/ * code * /}那是什么意思?這是否意味著如果我的代碼庫沒有任何Objective-C文件,autoreleasepool {}是不必要的?有一個例子autoreleasepool可以是有用的:- (void)useALoadOfNumbers {
for (int j = 0; j < 10000; ++j) {
@autoreleasepool {
for (int i = 0; i < 10000; ++i) {
NSNumber *number = [NSNumber numberWithInt:(i+j)];
NSLog(@"number = %p", number);
}
}
}}如果上面的代碼被autoreleasepool刪除后轉(zhuǎn)換成Swift ,那么Swift是否足夠聰明,知道該number變量應該在第一個之后發(fā)布}(就像其他語言一樣)?
2 回答

開滿天機
TA貢獻1786條經(jīng)驗 獲得超13個贊
autoreleasepool
返回autorelease
對象(由Objective-C代碼或使用Cocoa類創(chuàng)建)時,模式在Swift中使用。autorelease
Swift中的模式與Objective-C中的模式非常相似。例如,考慮一下你的方法的Swift再現(xiàn)(實例化NSImage
/ UIImage
對象):
func useManyImages() { let filename = pathForResourceInBundle for _ in 0 ..< 5 { autoreleasepool { for _ in 0 ..< 1000 { let image = NSImage(contentsOfFile: filename) } } }}
如果您在Instruments中運行它,您將看到如下的分配圖:
但是如果你在沒有自動釋放池的情況下這樣做,你會發(fā)現(xiàn)峰值內(nèi)存使用率更高:
在autoreleasepool
允許時自動釋放對象斯威夫特被釋放你明確地管理,就像你能在Objective-C。
注意:處理Swift本機對象時,通常不會收到自動釋放對象。這就是為什么演示文稿提到了在“使用Objective-C”時只需要這個的警告,盡管我希望Apple在這一點上更清楚。但是如果你正在處理Objective-C對象(包括Cocoa類),它們可能是自動釋放對象,在這種情況下,Swift對Objective-C @autoreleasepool
模式的再現(xiàn)仍然很有用。
- 2 回答
- 0 關(guān)注
- 2313 瀏覽
添加回答
舉報
0/150
提交
取消