gpt4 book ai didi

Swift NSBlockOperation() 泄漏 : cannot make NSBlockOperation() weak

转载 作者:搜寻专家 更新时间:2023-11-01 06:40:01 27 4
gpt4 key购买 nike

为了避免在 Objective-C 中使用 NSBlockOperation 时发生内存泄漏,我们必须将变量声明为 weak 以便能够引用 block 内的 block 操作(如果需要则取消),通常如下所示:

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

但是在 Swift 中,当我尝试将我的 NSBlockOpeartion 声明为弱时,它始终为零。

weak var blockOp = NSBlockOperation()

如果没有弱引用,一切都很好,只是每次都会泄漏一点点内存。如何在 Swift 中引用 block 内的 block 而不泄漏内存?

最佳答案

您可以使用显式捕获列表 来捕获对操作的无主引用。 (这是我实际上建议使用无主引用的仅有的几次之一,因为只要它的 block 正在执行,该操作就会保留。如果您仍然对这种保证感到不舒服,您可以使用 weak 代替。)

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

请注意,这必须分成两行,因为无法从其自身的初始值引用该变量。

关于Swift NSBlockOperation() 泄漏 : cannot make NSBlockOperation() weak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730768/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com