दिलचस्प पोस्ट
Google के ऐप इंजिन एसडीके और क्लाउड एसडीके के बीच संबंध क्या है? "मणि इंस्टाल थर्मब्यरासर-वी '0.10.2' 'ओएसएक्स मेवेरिक्स पर स्थापित नहीं है रूबी में मैं एचटीएमएल संस्थाओं को एनकोड / व्याख्या कैसे करूं? कैसे matlotlib में imshow () के 'blurry प्रभाव बंद' बंद करें? एक जार के भीतर जेआर सहित कक्षापथ पूर्वप्रक्रमक मैक्रोज़ से मंच / कंपाइलर की पहचान कैसे की जाए? मैं jQuery के form.serialize का उपयोग कैसे करूं, लेकिन खाली फ़ील्ड को बाहर निकालूं वर्तमान दृश्य स्क्रीनशॉट कैप्चर करने और कोड में पुन: उपयोग कैसे करें? (आईफोन एसडीके) अस्पष्ट PHP कोड किसी मैक्रो का उपयोग किए बिना समय के आकार को संकीर्ण करें I जांचें कि क्या कोई फ़ाइल खुली नहीं है (अन्य प्रक्रिया के द्वारा उपयोग नहीं की गई है) पायथन में जैसा कि 'ddmmmyyyy' से परिवर्तित करते समय वापसी की अवधि जब मैं अपने नियंत्रक पर वापस पोस्ट करता हूं तो मेरे मॉडल के सभी मूल्य शून्य होते हैं एंड्रॉइड डायलॉगफ्रैगमेंट बनाम डायलॉग ऑब्जेक्ट्स की एक सरणी हटाएं

एनएसआरुन लूप को समझना

क्या NSRunLoop लिए कोई भी समझा सकता है? इसलिए मुझे पता है कि NSRunLoop साथ जुड़ा हुआ है? तो मान लें कि मैं एक थ्रेड की तरह बनाऊंगा

 NSThread* th=[[NSThread alloc] initWithTarget:self selector:@selector(someMethod) object:nil]; [th start]; -(void) someMethod { NSLog(@"operation"); } 

इस थ्रेड के बाद काम करने का अधिकार ठीक है? क्यों RunLoops उपयोग RunLoops या उपयोग करने के लिए? ऐप्पल डॉक्स से मैंने कुछ पढ़ा है लेकिन यह मेरे लिए स्पष्ट नहीं है, इसलिए कृपया इसे जितना संभव हो उतना आसान समझाएं

Solutions Collecting From Web of "एनएसआरुन लूप को समझना"

एक रन लूप एक अमूर्त है (अन्य बातों के अलावा) सिस्टम इनपुट स्रोतों (सॉकेट, पोर्ट, फाइल, कीबोर्ड, माउस, टाइमर, आदि) को संभालने के लिए एक तंत्र प्रदान करता है।

प्रत्येक NSThread का अपना रन लूप होता है, जो कि currentRunLoop विधि के माध्यम से पहुंचा जा सकता है।

सामान्य रूप से, आपको रन लूप का सीधे उपयोग करने की आवश्यकता नहीं है, हालांकि कुछ (नेटवर्किंग) घटक हैं जो आपको यह निर्दिष्ट करने की अनुमति दे सकते हैं कि वे किस आई लूप का इस्तेमाल I / O प्रोसेसिंग के लिए करेंगे।

किसी दिए गए धागे के लिए चलने वाला लूप एक या अधिक इनपुट स्रोतों के कुछ डेटा या ईवेंट तक इंतजार करेगा, फिर उचित इनपुट हैंडलर को आग्रह करें कि प्रत्येक इनपुट स्रोत को संसाधित करें जो "तैयार है।"

ऐसा करने के बाद, यह उसके लूप पर लौटाएगा, विभिन्न स्रोतों से इनपुट का संसाधन करेगा, और अगर "काम करने का कोई काम नहीं है" तो "सो" होगा।

यह एक बहुत ही उच्च स्तर का वर्णन है (बहुत अधिक विवरणों को टालने की कोशिश कर रहा है)

संपादित करें

टिप्पणी को संबोधित करने का प्रयास मैंने इसे टुकड़ों में तोड़ दिया।

  • इसका मतलब है कि मैं केवल धागे के भीतर पाश को चलाने के लिए उपयोग कर सकता हूँ / चला सकता / सकती हूँ?

वास्तव में। NSRunLoop धागा सुरक्षित नहीं है, और केवल धागे के संदर्भ से पहुँचा जा सकता है जो पाश चल रहा है।

  • क्या कोई आसान उदाहरण है कि कैसे लूप चलाने के लिए ईवेंट को जोड़ना है?

यदि आप किसी पोर्ट की निगरानी करना चाहते हैं, तो आप उस बंदरगाह को चलाने के लूप में जोड़ सकते हैं, और फिर रन लूप गतिविधि के लिए उस पोर्ट को देखेगा

 - (void)addPort:(NSPort *)aPort forMode:(NSString *)mode 

आप एक टाइमर को स्पष्ट रूप से जोड़ सकते हैं

 - (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode 
  • इसका क्या मतलब है कि यह उसके लूप पर लौटाएगा?

रन लूप सभी तैयार घटनाओं को हर चलना (इसके मोड के अनुसार) पर संसाधित करेगा। रन मोड के बारे में जानने के लिए आपको दस्तावेज़ीकरण को देखना होगा, क्योंकि यह एक सामान्य उत्तर के दायरे से परे है।

  • जब मैं धागा शुरू करते हैं तो क्या पाश निष्क्रिय है?

अधिकांश अनुप्रयोगों में, मुख्य रन लूप स्वचालित रूप से चल जाएगा। हालांकि, आप रन लूप शुरू करने के लिए ज़िम्मेदार हैं और आपके द्वारा स्पिन किए जाने वाले थ्रेड्स के आने वाले ईवेंट का जवाब देना है।

  • क्या धागे के बाहर थ्रेड रन लूप में कुछ इवेंट जोड़ना संभव है?

मुझे यकीन नहीं है कि तुम यहाँ क्या मतलब है आप रन लूप पर इवेंट नहीं जोड़ते आप इनपुट स्रोतों और टाइमर स्रोतों को जोड़ें (धागा से जो रन लूप का मालिक है)। रन पाश उन्हें गतिविधि के लिए देखता है आप निश्चित रूप से अन्य थ्रेड्स और प्रक्रियाओं से डेटा इनपुट प्रदान कर सकते हैं, लेकिन रन लूप द्वारा इनपुट की प्रक्रिया की जाएगी जो चलने वाले लूप पर चलने वाले थ्रेड पर उन स्रोतों की निगरानी कर रहे हैं।

  • क्या इसका मतलब यह है कि कभी-कभी मैं किसी समय के लिए धागा को अवरुद्ध करने के लिए चलने वाला लूप का उपयोग कर सकता हूं

वास्तव में। वास्तव में, एक रन लूप एक ईवेंट हैंडलर में "रहना" होगा जब तक कि ईवेंट हैंडलर वापस नहीं आएगा आप इसे केवल किसी भी ऐप में पर्याप्त रूप से देख सकते हैं किसी भी आईओ कार्रवाई के लिए एक हेन्डलर स्थापित करें (जैसे, बटन प्रेस) जो सोता है। आप मुख्य रन लूप (और पूरे यूआई) को तब तक ब्लॉक करेंगे जब तक कि यह विधि पूरी नहीं हो जाती।

वही किसी भी रन लूप पर लागू होता है

मेरा सुझाव है कि आप रन लूप पर निम्न दस्तावेज पढ़ते हैं:

https://developer.apple.com/documentation/foundation/nsrunloop

और धागे के भीतर उनका उपयोग कैसे किया जाता है:

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1

Runloops एक बॉक्स की तरह सा है जहां सामान बस होता है

मूल रूप से रनलोप में, आप कुछ ईवेंट की प्रक्रिया के लिए जाते हैं और फिर वापस आते हैं। या वापसी अगर यह किसी भी घटनाओं की प्रक्रिया को समयबाह्य होने से पहले नहीं करता है आप अपने वर्तमान लूप में हस्तक्षेप किए बिना पृष्ठभूमि में डेटा प्रोसेस करने वाले एसिंक्रोनस NSURLConnections के समान कह सकते हैं, लेकिन एक ही समय में आपको डेटा सिंक्रोनस के लिए आवश्यक है। जो रनलोप की सहायता से किया जा सकता है जो आपके एसिंक्रोनस एनएसआरआर कनेक्शन को पकड़ कर कॉलिंग समय पर डेटा प्रदान करता है। आप निम्नानुसार Runloop का उपयोग कर सकते हैं: –

 NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:0.1]; while (YourBoolFlag && [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:loopUntil]) loopUntil = [NSDate dateWithTimeIntervalSinceNow:0.1]; 

इस Runloop में जब तक आप अपने कुछ अन्य काम को पूरा करने और झूठी करने के लिए YourBoolFlag सेट चला जाएगा

इसी प्रकार आप उन्हें धागे में उपयोग कर सकते हैं।

आशा है कि यह आपको मदद करता है

भागो लूप हैं जो इंटरैक्टिव ऐप्स को कमांड लाइन टूल से अलग करते हैं।

  • कमांड लाइन उपकरण मापदंडों के साथ शुरू किए जाते हैं, उनके आदेश को निष्पादित करते हैं, फिर बाहर निकलें
  • इंटरैक्टिव ऐप्स उपयोगकर्ता इनपुट की प्रतीक्षा करें, प्रतिक्रिया दें, फिर प्रतीक्षा करें

यहां से

वे आपको उपयोगकर्ता नल तक इंतजार करने और तदनुसार प्रतिक्रिया देने की अनुमति देते हैं, जब तक आप पूरा नहीं करते हैं तब तक प्रतीक्षा करें और अपने परिणामों को लागू करें, जब तक आप टाइमर नहीं मिलते हैं और एक फ़ंक्शन करते हैं तब तक प्रतीक्षा करें। यदि आप उपयोगकर्ता नल को सुन नहीं सकते हैं, तो आप एक नेटवर्क कॉल होने तक इंतजार नहीं कर सकते, आपको एक्स मिनट में नहीं जा सकता है।

इस टिप्पणी से भी:

पृष्ठभूमि धागे में अपने स्वयं के रनलोप्स नहीं हैं, लेकिन आप केवल एक जोड़ सकते हैं। जैसे- AFNetworking 2.x ने किया यह पृष्ठभूमि धागे पर NSURL कनेक्शन या NSTimer के लिए और सही तकनीक की कोशिश की गई थी, लेकिन हम यह बहुत अधिक नहीं करते, क्योंकि नए एपीआई ऐसा करने की आवश्यकता को खत्म करते हैं। लेकिन ऐसा प्रतीत होता है कि URL सत्र, उदाहरण के लिए, यहां सरल अनुरोध है , चल रहा है [छवि के बाएं पैनल को देखें] मुख्य कतार में पूर्णता वाले हैंडल, और आप देख सकते हैं कि उसे पृष्ठभूमि थ्रेड पर रन लूप है