Swift delegate

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

图片:


文本:

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中

*/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容