swift闭包中的循环引用

原创 Laughing  2017-07-09 18:37  阅读 74 次 评论 0 条

在一个类中,如果某个属性为闭包,则也可能产生类与闭包之间的相互引用。闭包是一种特殊的语法结构,在其中使用引用类型的实例都会是引用计数+1

闭包产生循环引用的例子

  1. //: Playground - noun: a place where people can play  
  2.   
  3. import UIKit  
  4.   
  5. class MyClass{  
  6.     var name:String = "李森的博客"  
  7.     lazy var closure:()->Void={  
  8.         print(self.name)  
  9.     }  
  10.     deinit {  
  11.         print("deinit")  
  12.     }  
  13. }  
  14.   
  15. var myClass:MyClass? = MyClass()  
  16. myClass?.closure()  
  17. myClass = nil//不会打印deinit  

解决闭包产生的循环引用

  1. //: Playground - noun: a place where people can play  
  2.   
  3. import UIKit  
  4.   
  5. class MyClass{  
  6.     var name:String = "李森的博客"  
  7.     lazy var closure:()->Void={  
  8.         [unowned self]()->Void in  
  9.         print(self.name)  
  10.     }  
  11.     deinit {  
  12.         print("deinit")  
  13.     }  
  14. }  
  15.   
  16. var myClass:MyClass? = MyClass()  
  17. myClass?.closure()  
  18. myClass = nil//不会打印deinit  
本文地址:https://www.lisen.me/463.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情