2016-04-05 17 views
5

Trong Java, chúng tôi có lớp ThreadLocal:tương đương trên Objective C/Swift của Java ThreadLocal Biến

Lớp này cung cấp các biến thread-địa phương. Các biến này khác với các đối tác bình thường của chúng ở chỗ mỗi luồng truy cập một (thông qua phương thức get hoặc set) có bản sao riêng biệt, được khởi tạo độc lập của biến đó. ThreadLocal trường hợp thường là private static trường trong các lớp muốn liên kết trạng thái với một chuỗi (ví dụ: ID người dùng hoặc ID giao dịch).

Ví dụ:

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

Có bất kỳ tương đương trong Objective C hoặc Swift để mô phỏng hành vi này? Tôi có thể sử dụng trên Swift:

static let String = someInitialValue() 

và đạt được cùng một mục tiêu?

+0

có thể trùng lặp của [lưu trữ Thread-Local và iOS] (http://stackoverflow.com/questions/6557768/thread-local-storage- and-ios) – Cootri

+0

Bạn có chắc chắn muốn tạo chủ đề chứ không phải GCD? http://stackoverflow.com/questions/11962850/is-there-a-queue-dictionary-for-a-gcd- – Darko

Trả lời

8

Hãy xem NSThread threadDictionary. Tôi tin rằng điều này gần như giống nhau.

Một sử dụng điển hình trong Objective-C có thể là:

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

someObject = threadData[someKey]; // read 
Các vấn đề liên quan