接待员模式是一种设计模式,它提供了一种将事件从一个线程重定向到另一个线程以供处理的方法。使用键值观察(KVO)的魔力。更多信息:接待员
我理解这个概念和密码。我正在努力的是理解如何完成以下工作:
“接待员模式有用的一种常见情况是键值观察。在键值观察中,通过KVO通知将模型对象属性的值更改传递给观察者。然而,对模型对象的更改可能发生在后台线程上。这会导致线程不匹配,因为对模型对象状态的更改通常会导致用户界面的更新,而这些变化必须发生在主线程上。在这种情况下,您希望将KVO通知重定向到主线程。在这种情况下,可以对应用程序的用户界面进行更新。”
下面是示例实现中描述的代码片段。
客户端对象提供了在创建接待员对象时更新用户界面的块代码,如清单4-4所示。注意,当它创建接待员对象时,客户端传入要在其上执行块的操作队列,在本例中是主操作队列。
RCReceptionist *receptionist = [RCReceptionist receptionistForKeyPath:@"value" object:model queue:mainQueue task:^(NSString *keyPath, id object, NSDictionary *change) {
NSView *viewForModel = [modelToViewMap objectForKey:model];
NSColor *newColor = [change objectForKey:NSKeyValueChangeNewKey];
[[[viewForModel subviews] objectAtIndex:0] setFillColor:newColor];
}];
简单地问,如何从主线程获取主操作队列(又名“mainQueue”)?谁能帮我把这里的点点滴滴连接起来。
发布于 2011-11-21 15:24:42
要获取主操作队列:
[NSOperationQueue mainQueue];
https://stackoverflow.com/questions/8214033
复制相似问题