ios – Swift:如何解决“协议”类型的弱变量是非法的问题

前端之家收集整理的这篇文章主要介绍了ios – Swift:如何解决“协议”类型的弱变量是非法的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在阅读了有关此问题的一些帖子之后,我发现我的协议应该继承“class”,以便’weak’能够处理我的委托变量.

‘weak’可能只适用于类或类绑定协议类型.

如果我的协议没有从’class’继承,那么swift‘推断’它应该是弱的吗?

这是将“协议”类型的变量强制转换为弱的事实上的方法吗?

在内存管理方面会发生什么

protocol FacebookLoginViewControllerDelegate: class {
    func facebookLoginViewControllerDidLogin(controller: FacebookLoginViewController)
}

class FacebookLoginViewController: UIViewController {

    weak var delegate: FacebookLoginViewControllerDelegate?

}

解决方法

使用:class绑定的协议类只是告诉编译器它只能表示一个引用类型 – 因此你可以在它上面使用weak属性.

如果不将协议标记为类绑定,则Swift将假定它可以表示引用或值类型.因为ARC(自动引用计数)仅适用于引用,而不适用于值,因此编译器将阻止您将弱属性放在其上.

ARC不能使用值类型的原因是因为它们在传递它们时会被复制,而不是通过引用传递.因此,与参考类型不同,它们的内存可以轻松管理,因为它们的生命周期是超可预测

对于引用类型,如果您正在使用委托模式,那么委托应始终为弱以避免保留周期 – 因此协议应始终是类绑定的.使用委托的值类型几乎没有任何意义,因为它总是引用您分配给它的副本.

猜你在找的iOS相关文章