码迷,mamicode.com
首页 > 移动开发 > 详细

[iOS]观察者模式如何传递参数 addObserver:forKeyPath:options:context:

时间:2014-09-23 19:47:55      阅读:7616      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   使用   ar   for   数据   

注册一个观察者

- (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:

标签:style   blog   color   io   os   使用   ar   for   数据   

原文地址:http://www.cnblogs.com/kilinli/p/3988996.html

(1)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!