delegate使用注意:
1、協(xié)議繼承自NSObjectProtocol
2、弱引用delegate,防止代理對象無法釋放導(dǎo)致的循環(huán)引用
自定義Person類,設(shè)置代理
class Person: NSObject {
weak var delegate: PersonDelegate?
override init() {
super.init()
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
self.peopleLife()
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
self.peopleRun()
}
}
}
func peopleLife() {
delegate?.life()
}
func peopleRun() {
delegate?.run()
}
deinit {
print("Person deinit")
}
}
protocol PersonDelegate: NSObjectProtocol {
func life()
func run()
}
SecViewController成為Person的代理:實(shí)現(xiàn)協(xié)議中的方法
class SecViewController: UIViewController, PersonDelegate {
func life() {
print("vc-life")
}
func run() {
view.backgroundColor = .purple
print("vc-dismiss")
}
var per: Person?
override func viewDidLoad() {
super.viewDidLoad()
per = Person()
per?.delegate = self
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.dismiss(animated: true) {
}
}
deinit {
print("sec deinit")
}
}