如何在Swift中使用weak修饰Delegate
2017-07-03 08:41
323 查看
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
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? }
相关文章推荐
- Swift内存管理、weak和unowned以及两者区别(如何使用Swift 中的weak与unowned?)
- 如何使用Model View delegate自定义列表
- 如何在 Swift 项目中使用 CocoaPods
- iOS- Swift:如何使用iOS8中的UIAlertController
- 如何在Mac上使用Swift调用C接口开发条形码应用
- ios delegate 使用注意 assign,weak
- C#中如何使用访问修饰符来修饰属性
- 如何在 Swift 中使用 CommonCrypto 类进行加密(I)
- 如何使用iOS 8的虚化效果(Swift版本)
- 如何正确使用property里面的strong,weak等关健字
- 一张图看懂 why UI控件 使用 weak 修饰
- 如何在原有的Objective-C中使用Swift和在Swift中使用Objective-C
- 如何在swift 使用16进制RGB值描述颜色
- 如何在Swift中创建和使用Model [ MagicalRecord ]
- 如何在OC中使用Swift如何在Swift中使用OC
- 如何在 Swift 项目中使用 CocoaPods 支持
- 如何使用Model View delegate自定义列表
- Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)
- 如何在 Swift 语言下使用 iOS Charts API 制作漂亮图表?
- 一张图看懂 why 代理和数据源 使用 weak 修饰