![](/img/trans.png)
[英]How to make a JSON Response asynchronous in Swift with NSOperationQueue and 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.