gpt4 book ai didi

ios - 我是否需要使用捕获列表来避免以下代码中的保留循环?就好像 A 没有直接持有 B 而 B 正在阻止 A

转载 作者:行者123 更新时间:2023-11-28 08:08:03 24 4
gpt4 key购买 nike

请看一下。我不确定以下代码是否具有保留周期。

我查看了与保留周期相关的其他帖子和文章,但仍然不清楚以下代码。我故意重命名类和其他东西。

import UIKit

class SomeInterface {
var queue: OperationQueue?
private static var sharedInterface: SomeInterface = SomeInterface()

class func getInterface() -> SomeInterface {
return sharedInterface
}

init() {
queue = OperationQueue()
}
class func add(toQueue block : @escaping ()->Void) {
SomeInterface.getInterface().queue?.addOperation(block)
}
func someWork() {
print("some work")
}
deinit {
print("deinitlized")
}
}

// Here instance of SomeInterface holding strong reference to **queue**, And //**queue** retains the closure and closure eventually capture "**self**"
class InterfaceCore {
class func executeSomeWork() {
SomeInterface.add(toQueue: { // Should I use capture list here?
SomeInterface.getInterface().someWork()
})
}
}

InterfaceCore.executeSomeWork() // Would it create retain cycle?

//如果是,我使用捕获列表是否正确。

class InterfaceCore {
class func executeSomeWork() {
SomeInterface.add(toQueue: { [weak weakInterface = SomeInterface.getInterface() ] in
if let _ = weakInterface {
SomeInterface.getInterface().someWork()
}
})
}
}

最佳答案

这里没有保留循环。您可以通过在 sharedInterface 上调用 isKnownUniquelyReferenced 来确认这一点,以查看它持有对共享实例的唯一引用。

特别是闭包不捕获接口(interface),因为它是通过 getInterface 获取它,而不是首先存储对它的引用。

关于ios - 我是否需要使用捕获列表来避免以下代码中的保留循环?就好像 A 没有直接持有 B 而 B 正在阻止 A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44541511/

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