Swift delegate

ARC 中,对于一般的 delegate,在声明中将其指定为 weak,在这个 delegate 实际的对象被释放的时候,会被重置回nil, 在Swift中和OC有些不同,如下所示

图片:


Swift delegate_第1张图片

文本:

importUIKit

protocol MyDelegate:NSObjectProtocol{

funcmyMethod()

}

class My {

weak var delegate:MyDelegate?

}

class Demo:UIViewController,MyDelegate{

funcmyMethod() {

print("myMethod")

}

override func viewDidLoad() {

letmy =My()

my.delegate=self

}

}

/**

* 如果不加NSobjectProtocol,那么则会报错,报错内容error: 'weak' may only be applied to class and class-bound protocol types, not 'MyDelegate' weak var delegate: MyDelegate?

* 原因:Swift的protocol是可以被除了class以外的其他类型遵守的,而对于像struct或是enum这样的类型不通过引用计数来管理内存,所以不能用weak这样的ARC的概念来进行修饰。

* 解决办法:Swift中使用weak delegate,需要将protocol限制在class中

* 在protocol后面加入以下两种

1.NSObjectProtocol让协议遵循NSObjectProtocol这个协议

2.class限制协议只用在class中

*/

你可能感兴趣的:(Swift delegate)