我在代码中使用dispatch_once
和dispatch_async
来分别处理单例和并发。
dispatch_once
代码并不太复杂:
+ (instancetype)sharedInstance {
static dispatch_once_t once;
static id sharedInstance;
dispatch_once(&once, ^
{
sharedInstance = [self new];
});
return sharedInstance;
}
对于dispatch_async
,它只是在Facebook API调用返回内执行的代码块(以确保它在主线程上执行):
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
[self.tableView setNeedsDisplay];
});
当我编译我的x86应用程序时,它工作正常,没有错误出现。如果我为x86_64(64位)编译,则会引发以下错误:
Undefined symbols for architecture x86_64:
"_NR__dispatch_async", referenced from:
___23-[SNFFeedTVC getPhotos]_block_invoke in SNFFeedTVC.o
"_NR__dispatch_once", referenced from:
+[SNFFacebook sharedInstance] in SNFFacebook.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我使用的GCD代码是标准的,并不复杂,所以我不知道它为什么不能为这个架构编译。有没有解决这个问题?