识别GCD线程

时间:2011-03-03 14:12:02

标签: objective-c core-data grand-central-dispatch

我编写了一个Core Data抽象类,它包含持久存储,对象模型和对象上下文。为了简化多线程,我编写了对象上下文的访问器,以便它通过使用[NSThread currentThread]来识别线程,返回一个仅对当前线程可用的实例。

只要我不使用GCD,这就完美无缺,我想用它作为旧NSThread的替代品。所以我的问题是,如何识别GCD线程?这个问题适用于iOS和Mac OS X,但我猜两个平台都是一样的。

3 个答案:

答案 0 :(得分:1)

也许您可以在GCD上下文using dispatch_set_context()

中存储每个线程的CD上下文

答案 1 :(得分:1)

您可以检查dispatch_get_current_queue()是否返回任何内容。我喜欢Jeremy的想法,即使用队列的上下文存储过渡到每个队列的CD上下文而不是每个线程的CD上下文模型。

答案 2 :(得分:0)

魔法记录中的contextForCurrentThread辅助方法与所说的非常类似(即每个线程保留一个上下文)。 GCD执行块在单个队列上运行时,可能会在GCD管理的任何线程上运行,这将导致一些随机崩溃。查看此文章:http://saulmora.com/2013/09/15/why-contextforcurrentthread-doesn-t-work-in-magicalrecord/