Avatar ·

在 Swift 闭包中是否总是需要使用 [unowned self]?

大家好!我是一名初学 iOS 开发者,一直搞不清楚闭包中的强引用循环(retain cycles)。 这里有一个简单的例子:我在控制器中发起网络请求。 ```swift class ProfileViewController: UIViewController { var nameLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() fetchUserProfile() } func fetchUserProfile() { APIClient.shared.getUserProfile { [weak self] profile in self?.nameLabel.text = profile.name } } } ``` 我看到很多人使用 `[weak self]`,但有些人写 `[unowned self]`。有什么区别?什么时候应该使用 `unowned`?或者最好总是使用 `weak`? 我听说如果对象已经被释放,`unowned` 可能会导致崩溃。但既然这样,为什么还需要它?也许有些情况下 `weak` 不够用或不方便? 请用例子解释:在什么情况下 `unowned` 是安全的,什么情况下不安全?