nsInvocationopration का उपयोग कर एक सरल फीफो बनाने के लिए आप एक आपरेशन सेट करने की आवश्यकता होगी addDependency का उपयोग अन्य पर निर्भर होने के लिए:। विधि
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSInvocationOperation *oper1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSth:) object:@"1"];
NSInvocationOperation *oper2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSth:) object:@"2"];
NSInvocationOperation *oper3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSth:) object:@"3"];
[oper2 addDependency:oper1];
[oper3 addDependency:oper2];
//oper3 depends on oper2 wich depends on oper1
//order of execution will ber oper1->oper2->oper3
//Changing the oreder will not change the result
[queue addOperation:oper2];
[queue addOperation:oper3];
[queue addOperation:oper1];
- (void) doSth:(NSString*)str
{
NSLog(str); //log will be 1 2 3
//When you remove the addDependency calls, the logging result that i got where
//different between consecutive runs i got the following
//NSLog(str); //log will be 2 1 3
//NSLog(str); //log will be 3 1 2
}
नोट: यदि आप NSInvocationOperation
उपयोग कर रहे हैं तो स्थापित करने maxConcurrentOperationCount
1 करने के लिए सबसे अधिक संभावना है आप के लिए चाल, isReady के बाद से नहीं आप
लेकिनसंपादित कर सकेगा करते हैं= 1 एक अच्छा समाधान आप के बाद से NSOperation
की अपनी खुद की उपवर्गों बनाने NSOperation डेरिवेटिव में आप isReady
समारोह को ओवरराइड और वापसी कर सकता है कोई, (कुछ कार्रवाई से कुछ डेटा इंतजार करने की आवश्यकता होगी कल्पना करना रंदा कर रहे हैं नहीं होगा करने के लिए एक सर्वर आदेश इन मामलों में ठीक ढंग से काम करने के लिए) आप isReady no
वापसी होगी जब तक आप वास्तव में तैयार इन मामलों में आप कतार
अंदर operations
के बीच dependencies
जोड़ने के लिए सेब डॉक्स इस एक सीरियल कतार के बराबर से की आवश्यकता होगी रहे हैं में । हालांकि, आपको ऑपरेशन ऑब्जेक्ट्स के धारावाहिक निष्पादन पर कभी भरोसा नहीं करना चाहिए। ऑपरेशन की तत्परता में परिवर्तन परिणामस्वरूप निष्पादन आदेश
स्रोत
2012-06-08 12:31:43
निष्पादन के आदेश भी आपरेशन की कतार प्राथमिकता के आधार पर निर्भर करता है। – JeremyP
बहुत सच है। अपडेट किया गया। –
तो यदि मेरे परिचालनों की सभी प्राथमिकताएं हैं, तो कोई निर्भरता नहीं है और केवल 'isReady' (मैं ओवरराइड नहीं करता) के सुपरक्लस कार्यान्वयन पर भरोसा करता हूं, जिसके परिणामस्वरूप फीफो कतार होनी चाहिए? – Barjavel