ios - 如何正确地将弱引用传递给函数的调用者?

标签 ios swift

假设你有...

class Boss {
   func callback() { }
}

你有类似...

class Worker {
   static func compute(forMe: Boss) {
      .. do some work that takes 10 seconds .. 
      forMe?.callback()
   }
}

所以:在 Boss 的特定实例中的某个地方,比方说 b,您可以调用类似...的内容

 Worker.compute(forMe: self)

假设 10 秒过去了。假设在 7 秒时,b 不再存在(好吧,我希望它不再存在)。在这 10 秒结束时,我想让 compute 说:“哦,该死,看来 forMe 不再存在了。我不会做回调,并给出起来。”

所以,“compute”中的“forMe”应该是弱的。 (我猜?)

真的,如何在 Swift 中实现这个基本概念?

最佳答案

如果您的 compute 函数正在异步执行工作并获取回调,那么它可以在该工作的闭包中弱捕获您的参数:

static func compute(forMe: Boss) {
    doSomethingAsync { [weak forMe] in
        // forMe will be nil in here if it was deallocated before this is called
        forMe?.callback()
    }
}

关于ios - 如何正确地将弱引用传递给函数的调用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60834611/

相关文章:

ios - 制作按钮切换方法——objective-c

iOS 使用 Swift 文件作为第一个 View

swift - GameplayKit + SceneKit, GKAgent 旋转转换

swift - 'map' 产生 [T],而不是预期的上下文结果类型 'UnsafeMutablePointer<CGFloat>'

arrays - swift 3 : Sort Ordered List of Objects by Property

ios - 在实体中找不到键路径 <transientproperty>

ios - Http get with Swift-2 中的查询参数

ios - 带有额外空间的 UITableViewController 滚动(如 Notes 应用程序)

ios - Swift 3.0 中的选择器

ios - 为什么模拟器只有12行?