dynamic
@H_502_12@class Dog: NSObject { @objc dynamic func test1() {} func test2() {} } var d = Dog() d.test1() d.test2()
- 对应汇编
KVC\KVO
@H_502_12@class Observer: NSObject { override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSkeyvalueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { print("observeValue", change?[.newKey] as Any) } }
@H_502_12@class Person: NSObject { @objc dynamic var age: Int = 0 var observer: Observer = Observer() override init() { super.init() self.addobserver(observer, forKeyPath: "age", options: .new, context: nil) } deinit { self.removeObserver(observer, forKeyPath: "age") } } var p = Person() // observeValue Optional(20) p.age = 20 // observeValue Optional(25) p.setValue(25, forKey: "age")
block方式的KVO
@H_502_12@class Person: NSObject { @objc dynamic var age: Int = 0 var observation: NSkeyvalueObservation? override init() { super.init() observation = observe(\Person.age, options: [.new, .old]) { (person, change) in print(change.newValue as Any) } } } var p = Person() // Optional(20) p.age = 20 // Optional(25) p.setValue(25, forKey: "age")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。