首页 > 代码库 > [iOS]观察者模式如何传递参数 addObserver:forKeyPath:options:context:
[iOS]观察者模式如何传递参数 addObserver:forKeyPath:options:context:
注册一个观察者
- (void)addNewObserver{ [object addObserver:self forKeyPath:@"oneKey" options:NSKeyValueObservingOptionNew context:(__bridge_retained void *)(pragma)];}
context:需要传递的对象是一个(void *)类型的数据,这是一个C类型的对象,我们需要做的就是将id类型的对象转成C类型。
pragma是需要传递的具体数据,经过(__bridge_retained void *)强转为void * , 注意,对象被retained了,无论你的工程是不是arc的,都要在使用完成之后手动释放一下。
观察数据
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ([keyPath isEqualToString:@"oneKey"]) { //Do something if (workDone == YES) { CFBridgingRelease(context); } }}
当工作全部完成后(workDone == YES),手动释放一下刚才被retained的对象,CFBridgingRelease(context).
[iOS]观察者模式如何传递参数 addObserver:forKeyPath:options:context:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。