【发布时间】:2014-06-29 23:22:15
【问题描述】:
我正在尝试同步调用 facebook sdk。我知道不建议这样做,但这只是更大初始化的一部分,它已经在一个单独的线程上运行,而主线程正在显示“请稍候”屏幕。
我试过以下代码:
NSConditionLock *threadLock = [[NSConditionLock alloc] initWithCondition:101];
[FBSession openActiveSessionWithReadPermissions:@[@"public_profile"]
allowLoginUI:YES
completionHandler:
^(FBSession *session, FBSessionState state, NSError *error) {
NSLog(@"Completionhandler called");
[threadLock lock];
[threadLock unlockWithCondition:100];
}];
NSLog(@"Waiting for unlock");
[threadLock lockWhenCondition:100];
[threadLock unlock];
NSLog(@"Unlocked");
这种锁定方法适用于其他场景,例如通过 dispatch_async 运行线程时。然而,在上面的代码中,completionhandler 永远不会被调用,因此锁永远不会被释放。如果我注释掉所有线程锁行,则会调用完成处理程序。
我不知道如何解释这种行为。有什么建议吗?
【问题讨论】:
标签: ios objective-c multithreading facebook-ios-sdk