0

我需要将线程上下文特定数据存储在使用 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() ,因为他们不希望人们做我想做的事情——尽管我看不到任何关于此的文档警告。1. 你知道这是一件坏事的任何原因吗?2. 如果线程恰好是系统提供的 CoreDataPrivateQueue 类型,您是否知道保存与当前线程相关的上下文数据的任何其他方法,其中使用的代码也应该能够工作?

4

1 回答 1

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"]);
}];
于 2013-09-11T11:07:05.747 回答