• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

如何在Swift中使用weak修饰Delegate

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.使用关键词“weak”是为了避免强引用导致的闭环。当两个对象相互强引用对方时就会引起引用闭环,他们的引用计数永远都不会为零;

2.仅当delegate是一个类时,使用weak关键词。Swift中的struct和enums是值对象类型(当一个新的实例生成时只是值复制),不是引用类型,所以它们不会引起强引用闭环;

3.weak引用是可选的(optional),所以必须使用var修饰词,这样在释放时可以置为nil;

4.父类对子类有强引用,从而不使用weak。但是当子类需要引用父类对象的时候,需要使用weak;

5.当不想拥有一个类的引用时,使用weak,而不仅仅是子类引用父类对象。当两个非继承的类对象需要相互引用对方时,选择一个使用weak;

6.建议delegate使用weak修饰,因为大多数情况,对象不需要拥有delegate。但是也有一些情况delegate是需要使用strong修饰,比如你在异步读取数据库时,可以在读取过程中保持delegate,在读取成功或者失败后,再设置delegate为nil;

7.协议protocol既可以用在类中也可以用在非类类型中(比如struct,enums),当在类中使用,需要标记协议类型是class

protocol MyClassDelegate: class {
    // ...
}

class SomeClass {
    weak var delegate: MyClassDelegate?
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap