簡體   English   中英

Swift NSBlockOperation()泄漏:無法使NSBlockOperation()變弱

[英]Swift NSBlockOperation() Leak: cannot make NSBlockOperation() weak

為了避免在Objective-C中使用NSBlockOperation時出現內存泄漏,我們必須將變量聲明為弱以便能夠引用塊內的塊操作(如果需要則取消),通常如下所示:

__weak NSBlockOperation *blockOp  = [NSBlockOperation blockOperationWithBlock:^{
     if (blockOp.cancelled) {
         ...
     }
}];

但是在Swift中,當我嘗試將我的NSBlockOpeartion聲明為弱時,它總是為零。

weak var blockOp = NSBlockOperation()

沒有弱引用,一切都很好,除了每次泄漏一點內存。 如何在Swift中引用塊內的塊而不泄漏內存?

您可以使用顯式捕獲列表來捕獲對操作的無主引用。 (這是我實際建議使用無主引用的唯一一次,因為只要它的塊正在執行,操作將被保留。如果你仍然對這個保證感到不舒服,你可以使用weak代替。)

let op = NSBlockOperation()
op.addExecutionBlock { [unowned op] in
    print("hi")
    if op.cancelled { ... }
}

請注意,這必須分為兩行,因為變量不能從其自己的初始值引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM