2016-04-05 44 views
5

在Java中的斯威夫特,我們有ThreadLocal類:在客觀等價的C/Java的ThreadLocal的變量

該類提供了線程局部變量。這些變量與其正常對應的不同之處在於,每個訪問一個線程的線程(通過其getset方法)都有其自己的,獨立初始化的變量副本。 ThreadLocal實例通常是private static中希望將狀態與線程關聯的類(例如,用戶ID或事務ID)的字段。

例子:

private static final ThreadLocal<StringBuilderHelper> 
    threadLocalStringBuilderHelper = new ThreadLocal<StringBuilderHelper>() { 
     @Override 
     protected StringBuilderHelper initialValue() { 
      return new StringBuilderHelper(); 
     } 
    }; 

是否有目標C或斯威夫特任何等效模擬這種行爲?我可以在斯威夫特上使用:

static let String = someInitialValue() 

並達到相同的目標嗎?

+0

的[線程本地存儲和iOS](可能的複製http://stackoverflow.com/questions/6557768/thread-local-storage-和-ios) – Cootri

+0

你確定你想要線程而不是GCD嗎? http://stackoverflow.com/questions/11962850/is-there-a-queue-dictionary-for-a-gcd- – Darko

回答

8

看一看NSThread threadDictionary。我相信這是大致相同的事情。

在Objective-C的典型用途是:

NSMutableDictionary *threadData = [[NSThread currentThread] threadDictionary]; 
threadData[someKey] = someObject; // write 

someObject = threadData[someKey]; // read