Objective-C Language
मल्टी-थ्रेडिंग
खोज…
एक साधारण धागा बनाना
एक धागा बनाने का सबसे सरल तरीका "पृष्ठभूमि में" चयनकर्ता को कॉल करके है। इसका मतलब है चयनकर्ता को निष्पादित करने के लिए एक नया धागा बनाया गया है। प्राप्त वस्तु कोई भी वस्तु हो सकती है, न केवल self
, बल्कि इसे दिए गए चयनकर्ता को जवाब देने की आवश्यकता है।
- (void)createThread {
[self performSelectorInBackground:@selector(threadMainWithOptionalArgument:)
withObject:someObject];
}
- (void)threadMainWithOptionalArgument:(id)argument {
// To avoid memory leaks, the first thing a thread method needs to do is
// create a new autorelease pool, either manually or via "@autoreleasepool".
@autoreleasepool {
// The thread code should be here.
}
}
अधिक जटिल धागा बनाएँ
NSThread
एक उपवर्ग का उपयोग करना अधिक जटिल थ्रेड्स के कार्यान्वयन की अनुमति देता है (उदाहरण के लिए, अधिक तर्क पारित करने की अनुमति देने के लिए या एक कक्षा में सभी संबंधित सहायक विधियों को एनकैप्सुलेट करने के लिए)। इसके अतिरिक्त, NSThread
उदाहरण को एक संपत्ति या चर में बचाया जा सकता है और इसकी वर्तमान स्थिति (चाहे वह अभी भी चल रही हो) के बारे में समझा जा सकता है।
NSThread
वर्ग cancel
नामक एक विधि का समर्थन करता है जिसे किसी भी धागे से बुलाया जा सकता है, जो तब cancelled
की cancelled
संपत्ति को YES
में थ्रेड-सुरक्षित तरीके से सेट करता है। थ्रेड कार्यान्वयन cancelled
की cancelled
संपत्ति को क्वेरी (और / या अवलोकन) cancelled
है और इसकी main
विधि से बाहर निकल सकता है। यह एक कार्यकर्ता धागा को शालीनतापूर्वक बंद करने के लिए इस्तेमाल किया जा सकता है।
// Create a new NSThread subclass
@interface MyThread : NSThread
// Add properties for values that need to be passed from the caller to the new
// thread. Caller must not modify these once the thread is started to avoid
// threading issues (or the properties must be made thread-safe using locks).
@property NSInteger someProperty;
@end
@implementation MyThread
- (void)main
{
@autoreleasepool {
// The main thread method goes here
NSLog(@"New thread. Some property: %ld", (long)self.someProperty);
}
}
@end
MyThread *thread = [[MyThread alloc] init];
thread.someProperty = 42;
[thread start];
धागा-स्थानीय भंडारण
प्रत्येक थ्रेड में एक उत्परिवर्ती शब्दकोश तक पहुंच है जो वर्तमान थ्रेड के लिए स्थानीय है। यह लॉकिंग की आवश्यकता के बिना एक आसान तरीके से कैश को प्रेषित करने की अनुमति देता है, क्योंकि प्रत्येक धागे का अपना समर्पित परिवर्तनशील शब्दकोश है:
NSMutableDictionary *localStorage = [NSThread currentThread].threadDictionary;
localStorage[someKey] = someValue;
थ्रेड समाप्त होने पर शब्दकोश स्वचालित रूप से जारी किया जाता है।