Fundacja zapewnia -[NSThread threadDictionary]
. Można go użyć do przechowywania obiektów Objective-C w lokalnym wątku, które mogą zawierać NSValue
zawijanie adresu dowolnej pamięci dynamicznej.
Należy zauważyć, że kakao przechodzi w wątkowe wykonywanie kodu gwintowanego, w którym przesyła się bloki kodu do uruchomienia na dowolnym dostępnym wątku systemowym. Jest to model używany przez Grand Central Dispatch i współużytkowany NSOperationQueue
. Kod opierający się na lokalnej pamięci wątku nie zapewni najlepszego wykorzystania tego modelu. Więcej informacji na ten temat można znaleźć w Apple's Concurrency Programming Guide.
ETA: Począwszy iOS 5/OS X 10.7, Grand Central Dispatch zyskał co można nazwać przechowywanie kolejki lokalnego poprzez dispatch_queue_set_specific
, dispatch_queue_get_specific
i dispatch_get_specific
funkcji. Setter pozwala ci dostarczyć funkcję destruktora oprócz wartości, gdy ustawisz nową wartość dla klucza lub gdy kolejka zostanie zniszczona. Kolejka getter sans używa aktualnej kolejki jako kontekstu i powtórzy wyszukiwanie w kolejce docelowej bieżącej kolejki, jeśli klucz nie jest zdefiniowany w bieżącej kolejce (podobnie jak działa wyszukiwanie właściwości w prototypowym systemie OO).
Czy można użyć ['boost :: thread_specific_ptr'] (http://boost.org/doc/libs/release/doc/html/thread/thread_local_storage.html#thread.thread_local_storage.thread_specific_ptr)? –
@ Space_C0wb0y: Nie wiem, prawdopodobnie. Nie wiedziałem o tym, więc jest taka możliwość :) – Goz