我正在关注此链接上关于GCD的Apple上次会议:https://developer.apple.com/videos/play/wwdc2016-720/?time=33
我在这里谈到了前提条件:https://developer.apple.com/videos/play/wwdc2016-720/?time=1267,Swift 3中的一个新功能。
到此为止:https://developer.apple.com/videos/play/wwdc2016-720/?time=1474用于此:
.register(observer:,queue :)
我的问题:这个函数如何保留对象BusyController
?
https://developer.apple.com/videos/play/wwdc2016/720/?time=1550
答案 0 :(得分:0)
您问register(observer:queue:)
如何保留BusyController
。
首先,让我们退后一步:让我们不要迷失他的榜样细节。他并不是说 会建立一个强大的引用,只是它可以,因此你应该谨慎对待{{1 }}
那么,deinit
如何保留DataTransform
?它只能保持对BusyController
的强烈引用。请注意,请勿将此自定义observer
方法示例与标准观察者方法混淆:他们只是说"想象register
对象建立了对DataTransform
的强引用..."
但是,他继续说"但是你是熟练的开发人员,而且你知道如何解决这个问题;使用BusyController
引用。"因此,一般来说,我们不会编写观察方法来维持对观察者的强烈引用。
但是,正如他接着说的那样,即使你擅长避免强大的参考周期,对象图也会变得相当复杂,所以依赖{{{{{{{{{{{{{{{{{{{{{{ 1}}清理。他主张明确weak
进程,并且可能使用前置条件来测试对象在时间deinit
之前是否已失效。