खोज…


एक साधारण धागा बनाना

एक धागा बनाने का सबसे सरल तरीका "पृष्ठभूमि में" चयनकर्ता को कॉल करके है। इसका मतलब है चयनकर्ता को निष्पादित करने के लिए एक नया धागा बनाया गया है। प्राप्त वस्तु कोई भी वस्तु हो सकती है, न केवल 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;

थ्रेड समाप्त होने पर शब्दकोश स्वचालित रूप से जारी किया जाता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow