Dro*_*com 2 cocoa multithreading xpc objective-c nsxpcconnection
我正在使用NSXPCConnection,而我的接口调用之一有一个回复块,如下所示:
- (void)addItem:(NSData *) withLabel:(NSString *) reply:(void (^)(NSInteger rc))reply;
Run Code Online (Sandbox Code Playgroud)
我这样称呼:
__block NSInteger status;
[proxy addItem:data withLabel:@"label" reply:^(NSInteger rc)
{
status = rc;
}
];
Run Code Online (Sandbox Code Playgroud)
我的理解是,答复块异步运行,并且有可能在方法返回后运行。
我想同步测试返回码,最好的方法是什么?
为了进一步阐明上面的代码段:proxy对象是NSXPCConnection使用该remoteObjectProxy方法从对象获得的远程对象。这是一个重要的细节,因为这会影响应答块在哪个队列上的调用。
小智 5
这就是派遣小组的目的。
NSTimeInterval timeout = 120; // in seconds
__block NSInteger status;
dispatch_group_t syncGroup = dispatch_group_create();
dispatch_group_enter(syncGroup);
[proxy addItem:data withLabel:@"label" reply:^(NSInteger rc)
{
status = rc;
dispatch_group_leave(syncGroup);
}
];
dispatch_time_t waitTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(NSEC_PER_SEC * timeout));
if(dispatch_group_wait(syncGroup, waitTime) != 0)
{
// complain about a request timing out
}
// enjoy your status
Run Code Online (Sandbox Code Playgroud)
如果您选择使用remoteObjectProxyWithErrorHandler来获取代理,那么您还需要记住在错误处理程序中调用dispatch_group_leave(syncGroup)。
我刚刚发现一种可能更好的方法:
创建远程对象时使用synchronousRemoteObjectProxyWithErrorHandler代替remoteObjectProxy。
无需信号量或组。
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |