swift oc

96 阅读1分钟
@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

多线程加锁