我想在单独的类中创建一个委托,比如:
class MapViewAnnotationDelegate: NSObject, SomeDelegate { //...}
然后在我的控制器中,我想分配:
someView.delegate = MapViewAnnotationDelegate()
但代表没有。。。如何达到这样的效果?我在Objective-C中读到了一些关于strong的内容,但据我所知,strong在Swift中是默认的。
最佳答案
你做的很好,但是你需要一些东西来支撑你的实例。delegate
传统的属性是weak
,因此它们不能确保对象被保留。必须有别的东西来保存它。最常见的解决方案是将属性添加到拥有someView
的类中,并在将其分配为委托之前将MapViewAnnotationDelegate
分配给该属性。这样,只要包含的objet存在,它就不会被释放。但任何保留它的东西都是可以的。
当前代码当前执行此操作:
创建MapViewAnnotationDelegate
将其分配给someView.delegate
请注意,没有对MapViewAnnotationDelegate的强引用(因为someView.delegate是弱引用)
销毁MapViewAnnotationDelegate
将someView.delegate设置为nil
一种可能是这样的:
class Owner {
let mapViewAnnotationDelegate = MapViewAnnotationDelegate()
let someView: ...
init() {
someView.delegate = mapViewAnnotationDelegate
}
}
在此配置中,
Owner
(它是someView
的所有者)在委托的生命周期中保持该委托。