亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否有必要在Swift程序中使用autoreleasepool?

是否有必要在Swift程序中使用autoreleasepool?

富國滬深 2019-08-08 10:50:17
是否有必要在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刪除后轉換成Swift ,那么Swift是否足夠聰明,知道該number變量應該在第一個之后發布}(就像其他語言一樣)?
查看完整描述

2 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

autoreleasepool返回autorelease對象(由Objective-C代碼或使用Cocoa類創建)時,模式在Swift中使用。autoreleaseSwift中的模式與Objective-C中的模式非常相似。例如,考慮一下你的方法的Swift再現(實例化NSImageUIImage對象):

func useManyImages() {
    let filename = pathForResourceInBundle    for _ in 0 ..< 5 {
        autoreleasepool {
            for _ in 0 ..< 1000 {
                let image = NSImage(contentsOfFile: filename)
            }
        }
    }}

如果您在Instruments中運行它,您將看到如下的分配圖:

https://img1.sycdn.imooc.com//5d4b8e1c0001a1c604620066.jpg

但是如果你在沒有自動釋放池的情況下這樣做,你會發現峰值內存使用率更高:

https://img1.sycdn.imooc.com//5d4b8e1e0001170f04620066.jpg

autoreleasepool允許時自動釋放對象斯威夫特被釋放你明確地管理,就像你能在Objective-C。

注意:處理Swift本機對象時,通常不會收到自動釋放對象。這就是為什么演示文稿提到了在“使用Objective-C”時只需要這個的警告,盡管我希望Apple在這一點上更清楚。但是如果你正在處理Objective-C對象(包括Cocoa類),它們可能是自動釋放對象,在這種情況下,Swift對Objective-C @autoreleasepool模式的再現仍然很有用。


查看完整回答
反對 回復 2019-08-08
  • 2 回答
  • 0 關注
  • 2372 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號