Swift中的weak和unowned关键字
Swift中没有了strong, assign, copy属性修饰符,对于所有的class类型变量都默认采用了strong类型,如果需要指定使用weak,则需要添加weak关键字修饰。
正是由于这种默认的strong类型,在闭包中会引起循环引用,导致内存无法释放,为了能够在闭包(block)中正常释放内存,需要对闭包中的self使用弱引用,也就是不持有self对象。 除了使用 weak关键字,另一个关键字unowned也可以打破循环引用的问题, 但它们之间还是存在区别的。
具体的内容,可查阅:https://zhanglei.blog.csdn.net/article/details/124068087
相关推荐
swift-快速定位Block循环引用所处位置
**使用Swift的Weak和Unowned**:通过在Block中使用`weak`或`unowned`关键字,可以防止Block捕获一个强引用。
Swift闭包详解[项目代码]
为了解决这一问题,Swift提供了两种特殊的引用类型:unowned和weak。使用unowned关键字时,闭包和它所引用的对象有相同的生命周期,因此在对象被销毁后,闭包不会尝试保留对象。
IOS_Assignment_2:iOS分配
Swift提供了weak和unowned关键字来打破这种循环引用。
Swift中如何避免循环引用的方法
同时,也可以使用 weak 和 unowned 关键字来避免循环引用。避免循环引用的方法有很多种。需要根据实际情况选择合适的方法来避免循环引用。只有这样,才能写出高质量的 Swift 代码。
objc.io - Advanced Swift_Swift 5.pdf
书中还讨论了闭包和引用循环、选择unowned和weak引用的场景、决定是使用结构体还是类的策略、以及具有值语义的类。


