Swift 避免循环引用

1、block

self.dataBack = { [weak self] (result) in 

self?.dataArr = result as! [String]

   }

    block 通过 [weak self] 将self的强引用改为弱引用


2、delegate

一般声明delegate 属性的时候,用weak修饰。tableView的delegate实现也是如此

weak open var delegate: UITableViewDelegate?

1)自定义代理协议的时候,应继承NSObjectProtocol,这时使用weak不会报错。

因为'weak' must not be applied to non-class-bound 'CustomViewDelegate'; consider adding a protocol conformance that has a class bound 

得修饰一个有类绑定的协议

2)@objc 

    声明代理协议的时候,如果前面有@objc关键字的话, 也可以用weak修饰delegate属性

你可能感兴趣的:(Swift 避免循环引用)