gpt4 book ai didi

swift - 去初始化时强引用不会变成弱引用

转载 作者:行者123 更新时间:2023-11-30 11:09:23 25 4
gpt4 key购买 nike

我正在从 YouTube 视频中了解弱引用,该人说我需要在类(class)中对作者进行弱引用,这将解决我的问题。

虽然在 Playgrounds 上 deinitialize 方法仍然没有出现。

我还做错了什么吗? 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

最佳答案

Playgrounds 可以保留对您的数据的强引用,以便进行预览。要真实地描述一段代码的去初始化,请在 Playground 之外对其进行测试。

此外,当对象存在弱引用时,当最后一个弱引用被释放时,实际上并不会立即调用析构器。相反,下次尝试访问弱引用时,该对象将被取消初始化。请参阅this blog post了解更多详情。

关于swift - 去初始化时强引用不会变成弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52324330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com