私はARCと強い参照サイクルを調べていて、私のこのコードに出くわしました:
class TestClass: UIView {
let button: UIButton = {
let view = UIButton()
view.frame = CGRect(x: 50, y: 50, width: 200, height: 200)
view.backgroundColor = .blue
view.translatesAutoresizingMaskIntoConstraints = false
view.setTitle("Button", for: .normal)
view.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
return view
}()
@objc private func buttonClicked() {
print("Clicked")
}
override init(frame: CGRect) {
super.init(frame: frame)
print("Object of TestClass initialized")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
print("Object of TestClass deinitialized")
}
}
self
クロージャー内のメソッドでの参照addTarget
は、強い参照サイクルを作成していないようです。
誰かが理由を説明できますか?
UIView
また、コンパイラから継承を削除すると、不平を言い始めることに気付きました: Use of unresolved identifier 'self'
.
誰かがこれも説明できますか?なぜこの場合に発生し、最初のケースでは発生しないのですか?