取消初始化时,强引用不会变成弱引用

时间:2018-09-14 02:51:21

标签: swift swift4

我正在从YouTube视频中了解弱引用,那个人说我需要在课程课程中为作者提供弱引用,这将解决我的问题。

尽管在Playgrounds上仍然没有出现反初始化方法。

我还做错了什么? author.courses.append(self)仍然保持着牢固的关系吗?

在尝试学习处理此类情况并防止内存泄漏的最佳做法时,请告诉我。

public class Author {

    public var name: String
    public var courses = [Course]()

    public init(name: String) {
        self.name = name
        print("Author \(name)")
    }

    deinit {
        print("Author \(name) deinitialized")
    }

}


public class Course {

    public var title: String
    public weak var author: Author?
    public init(title: String, author: Author) {
        self.title = title
        self.author = author
        author.courses.append(self)
        print("Course \(title)")
    }

    deinit {
        print("Course \(title) deinitialized")
    }

}

var author: Author? = Author(name: "John Doe")
var course: Course? = Course(title: "Best Swift Course Ever", author: author!)

author = nil
course = nil

1 个答案:

答案 0 :(得分:0)

出于预览目的,游乐场可以为您的数据提供强有力的参考。为了真实地描述一段代码的反初始化,请在运动场外对其进行测试。

此外,当对对象存在弱引用时,释放最后一个弱引用时实际上不会立即调用反初始化程序。而是,在下一次尝试访问弱引用时,将对象初始化。有关更多详细信息,请参见this blog post