第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決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刪除后轉(zhuǎn)換成Swift ,那么Swift是否足夠聰明,知道該number變量應該在第一個之后發(fā)布}(就像其他語言一樣)?
查看完整描述

2 回答

?
開滿天機

TA貢獻1786條經(jīng)驗 獲得超13個贊

autoreleasepool返回autorelease對象(由Objective-C代碼或使用Cocoa類創(chuàng)建)時,模式在Swift中使用。autoreleaseSwift中的模式與Objective-C中的模式非常相似。例如,考慮一下你的方法的Swift再現(xiàn)(實例化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

但是如果你在沒有自動釋放池的情況下這樣做,你會發(fā)現(xiàn)峰值內(nèi)存使用率更高:

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

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

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


查看完整回答
反對 回復 2019-08-08
  • 2 回答
  • 0 關(guān)注
  • 2313 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號