1.使用关键词“weak”是为了不强引用致使的闭环。当两个对象相互强引用对方时就会引发引用闭环,他们的引用计数永远都不会为零;数据库
2.仅当delegate是一个类时,使用weak关键词。Swift中的struct和enums是值对象类型(当一个新的实例生成时只是值复制),不是引用类型,因此它们不会引发强引用闭环;swift
3.weak引用是可选的(optional),因此必须使用var修饰词,这样在释放时能够置为nil;异步
4.父类对子类有强引用,从而不使用weak。可是当子类须要引用父类对象的时候,须要使用weak;code
5.当不想拥有一个类的引用时,使用weak,而不单单是子类引用父类对象。当两个非继承的类对象须要相互引用对方时,选择一个使用weak;对象
6.建议delegate使用weak修饰,由于大多数状况,对象不须要拥有delegate。可是也有一些状况delegate是须要使用strong修饰,好比你在异步读取数据库时,能够在读取过程当中保持delegate,在读取成功或者失败后,再设置delegate为nil;继承
7.协议protocol既能够用在类中也能够用在非类类型中(好比struct,enums),当在类中使用,须要标记协议类型是classio
protocol MyClassDelegate: class { // ... } class SomeClass { weak var delegate: MyClassDelegate? }