小编Pet*_* Li的帖子

为什么Swift不会自动处理循环引用(强引用循环)

对不起,如果这是一个愚蠢的问题.我刚开始学习swift.我主要使用php来完成我的日常工作.Apple Store的Swift教科书使用以下示例(我将其修改为较短版本)来演示弱引用的用法:

class Person {
    var apartment: Apartment?;
}

class Apartment {
    weak var tenant: Person?;
}

var john: Person?;           john = Person();
var number73: Apartment?;    number73 = Apartment();
john!.apartment = number73;  number73!.tenant = john;      //circular reference here

john = nil;   number73 = nil;         //deference from static variable names
Run Code Online (Sandbox Code Playgroud)

在上面的Apartment类定义中,如果从var tenant中删除关键字,则会在以下代码中创建一个强引用循环,以便GC不会释放这两个实例.但是,在我看来GC确实不需要弱参考的指示.很明显,这两个实例不能与当前作用域中的任何变量或任何静态变量链接,因此可以安全地处理它们.

为什么剂量Swift强制语法?我能弄清楚的唯一优势是弱关键词突出了逻辑,因此代码更容易阅读.

macos garbage-collection circular-reference swift

7
推荐指数
1
解决办法
2694
查看次数