我需要将线程上下文特定数据存储在使用NSPrivateQueueConcurrencyType线程执行的块中。这是一个我想在块中做什么的例子(我将给出的上下文数据的简化示例,但你明白了):
dispatch_queue_t myQueue = dispatch_get_current_queue(); NSMutableDictionary *myContext = @{@"Context": @"ContextData"}; dispatch_set_context(myQueue, (__bridge_retained void *)myContext);
但问题是用于获取对当前队列的引用的函数dispatch_get_current_queue()已被弃用,因此我不想使用它。我看不到任何其他机制来检索对此队列的引用,因此我可以保存上下文数据。我现在想知道Apple是否已弃用dispatch_get_current_queue(),因为他们不希望人们做我想做的事情 - 虽然我看不到任何文档警告。你知道这是一件坏事吗? 2.您是否知道相对于当前线程保存上下文数据的任何其他方法,如果线程碰巧是系统提供的CoreDataPrivateQueue类型,所使用的代码也应该能够工作?
答案 0 :(得分:0)
好的,所以可以改为进行NSThread等效调用。在单个系统上生成的NSPrivateQueueConcurrencyType类型的MOC可以正常工作。如果我在使用它之后遇到任何与线程生命周期有关的问题,将会更新:
[moc performBlockAndWait:^{
NSThread *currentThread = [NSThread currentThread];
NSMutableDictionary *myThreadDict = currentThread.threadDictionary;
[myThreadDict setObject:@"Some thread data" forKey:@"IRThreadData"];
}];
[moc performBlockAndWait:^{
NSThread *currentThread = [NSThread currentThread];
NSMutableDictionary *myThreadDict = currentThread.threadDictionary;
NSLog(@"Retreived dictionary value = %@", [myThreadDict objectForKey:@"IRThreadData"]);
}];