线程本地存储和iOS

我的理解是,iOS不支持__thread 。 显然,使用pthread_setspecific可以做到这一点。 但是,是否已经有一个已经实现了这个function的模板类?

我会尝试重新发明轮子,尤其是因为它不是一个简单的代码段。

任何链接将非常感激!

干杯

基础提供了-[NSThread threadDictionary] 。 您可以使用它来存储线程本地的Objective-C对象,其中可能包括一个NSValue包装任何dynamic存储的地址。

请注意,Cocoa正在朝着线程代码的线程盲执行方向发展,在那里您提交了代码块,以便在任何可用的系统拥有的线程上运行。 这是Grand Central Dispatch和共享的NSOperationQueue使用的模型。 依赖于线程本地存储的代码将不能充分利用这个模型。 有关更多信息,请参阅Apple的“ 并发编程指南” 。

ETA:从iOS 5 / OS X 10.7开始,Grand Central Dispatch通过dispatch_queue_set_specificdispatch_queue_get_specificdispatch_get_specific函数获得了可以称为队列本地存储的内容。 setter允许你提供一个析构函数,当你为这个键设置一个新值的时候,或者当这个队列被销毁的时候。 getter sans队列使用当前队列作为上下文,并且如果在当前队列上没有定义密钥(类似于原型OO系统中的属性查找工作),将重复在当前队列的目标队列上的查找。