MapViewAnnotationDelegate

MapViewAnnotationDelegate

我想在单独的类中创建一个委托,比如:

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的所有者)在委托的生命周期中保持该委托。

09-25 21:36