我的理解是iOS不支持__thread
。显然,有一种方法可以使用pthread_setspecific
来完成此操作。但是,是否已经有一个已实现此功能的模板类?
我不得不重新发明轮子,特别是因为它不是一段简单的代码。
非常感谢任何链接!
干杯
答案 0 :(得分:20)
基金会提供-[NSThread threadDictionary]
。您可以使用它来存储线程本地的Objective-C对象,其中可能包含NSValue
包装任何动态存储的地址。
请注意,Cocoa正在向线程代码的线程盲执行发展,您可以在其中提交要在任何可用的系统拥有的线程上运行的代码块。这是Grand Central Dispatch和共享NSOperationQueue
使用的模型。依赖于线程本地存储的代码将无法充分利用此模型。有关详细信息,请参阅Apple的Concurrency Programming Guide。
ETA:从iOS 5 / OS X 10.7开始,Grand Central Dispatch通过dispatch_queue_set_specific
,dispatch_queue_get_specific
和{{获得了您称之为队列本地存储的功能1}}功能。除了为密钥设置新值或销毁队列时的值,setter还允许您提供析构函数。 getter sans队列使用当前队列作为上下文,如果当前队列中未定义键,则将在当前队列的目标队列上重复查找(类似于原型OO系统中属性查找的工作原理)。