KVO与线程的问题

1.问题:KVO监听方法可以在子线程吗?

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change: 
(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
NSLog(@"%@",[NSThread currentThread]);
NSLog(@"%ld",_person.age);
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[NSThread detachNewThreadWithBlock:^{
    NSLog(@"%@",[NSThread currentThread]);
    _person.age ++;
}];
}

打印结果:

   <NSThread: 0x600003c890c0>{number = 3, name = (null)}
   <NSThread: 0x600003c890c0>{number = 3, name = (null)}

总结:
将修改对象属性过程放在子线程内执行,在监听回调方法内获取当前线程同样为子线程.故KVO的响应和KVO观察的值变化是在一个线程上的.

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 26,294评论 8 254
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 9,962评论 1 29
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 2,665评论 0 6
  • 伤痛在昨天 鲜血在从前 你是否 是否遗忘 来自地狱的深渊 沉沉灵魂的咆哮 人啊!喏小的人啊! 听不到潮水来时的呼号...
    苍术魂罗阅读 94评论 0 1
  • 看到这个标题,你也许会很纳闷,心大夫不是科普妇产科的吗,怎么改写社会专题了?非也,我只是单纯的认为这个标题既能吊起...
    心大夫阅读 155评论 0 0
  • 又过了睡觉的点,翻来覆去的睡不着,越是睡不着越胡思乱想,越胡思乱想越是睡不着。想过去,想现在,想未来,总之就是在异...
    Silvia15阅读 64评论 0 0
  • 亲爱的朋友, 祝好!昨晚终于看完《哈利波特与死亡圣器》,看至半夜。我其实很小的时候,曾经尝试地读过《哈利波特与混...
    居无所处阅读 170评论 0 0