接待员设计模式(如何重定向到主线程?)

时间:2011-11-21 15:18:42

标签: objective-c macos cocoa key-value-observing

Receptionist Pattern是一种设计模式,它提供了一种将事件从一个线程重定向到另一个线程以便进行处理的方法。使用键值观察(KVO)的神奇之处。更多信息:Receptionist

我理解概念和代码。我正在努力的是理解如何完成以下任务:

  

“接待员模式有用的一个常见情况是   关键价值观察。在键值观察中,价值的变化   模型对象的属性通过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')?有人可以帮我点点这里。

1 个答案:

答案 0 :(得分:4)

获取主操作队列:

[NSOperationQueue mainQueue];