在 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` 是安全的,什么情况下不安全?