我正在从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
答案 0 :(得分:0)
出于预览目的,游乐场可以为您的数据提供强有力的参考。为了真实地描述一段代码的反初始化,请在运动场外对其进行测试。
此外,当对对象存在弱引用时,释放最后一个弱引用时实际上不会立即调用反初始化程序。而是,在下一次尝试访问弱引用时,将对象初始化。有关更多详细信息,请参见this blog post。