ios 通知的简单实现

  1. block 方式实现通知
  2. block和方法区别, block没有observe,因此不能使用observe调用performSelector
  3. block 方式由于传递的是函数(block), 因此添加观察者就会被调用, 不会受dealloc 影响
  4. post 实际上就开始同步调用响应observer的方法,因此 post所在的线程和接受者是一致的
class YxNotificationCenter {
    
    static let `default` = YxNotificationCenter()
    
    var map: [String: Any] = [:]
    
    func post(name: String , object: Any? ) {
// 同步调用观察者方法, 因此没有指定线程的情况下  是在同一线程
        let fc = map[name] as! ()->Void
        
// 指定线程
//        let queue = OperationQueue();
//
//        queue.addOperation {
 //          let fc = map[name] as! ()->Void

//        }
        fc()
        
    }
    
    func addObserver(name: String, object: Any?, queue: OperationQueue?, finish:@escaping ()->Void)  {
        map.updateValue(finish, forKey: name)
        
        //进阶
//        1. 多个name, 需要用数组接收, 且数组需要使用弱引用
    }
    
    
}

使用

  YxNotificationCenter.default.addObserver(name: "123", object: nil, queue: OperationQueue.main) {
            print("123")
        }
  YxNotificationCenter.default.post(name: "123", object: nil);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容