@objc dynamic func objectRuntime() {}
1、被 @objc dynamic 修饰的內容会具有动态性,比如调用方法会走runtime那一套流程
2 、kVC\KVO
Swift 支持KVC \KVO 的条件 口属性所在的类、监听器最终继承自 NSObject
用 @objc dynamic 修饰对应的属性
3、关联对象
4、多线程开发 异步
DispatchQueue.global().async {
print("子线程")
DispatchQueue.main.async {
print("回到主线程")
}
}
public typealias Task = () -> Void
public static func async(_ task: @escaping Task) {
_async(task)
}
public static func async(_ task: @escaping Task,
_ mainTask:@escaping Task
) {
_async(task,mainTask)
}
private static func _async(_ task: @escaping Task,
_ mainTask: Task? = nil) {
let item = DispatchWorkItem(block: task)
DispatchQueue.global().async(execute: item)
if let main = mainTask {
item.notify(queue: DispatchQueue.main, execute: main)
}
}
5、延迟执行
@discardableResult
public static func delay(_ seconds: Double,
_ block:@escaping Task)-> DispatchWorkItem {
let item = DispatchWorkItem(block: block)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds, execute: item)
return item
}
返回DispatchWorkItem 可以对任务item.cancel()
6、dispatch_once
static var age:Int = getAge()
static func getAge() -> Int {
return 0
}
static var age:Int = {
return 0
}()
let _ = Self.age
多线程加锁