2010-01-19 14 views
24

के बीच अंतर मैं अपने कई ऐप्स में -performSelectorInBackground का उपयोग कर रहा हूं, -detachNewThreadSelector पर अनजान है। अब मैं सोच रहा हूं कि दोनों के बीच मतभेद क्या हैं। क्या वे काफी अधिक परिवर्तनीय हैं, या क्या अंतर और स्थान हैं जहां एक दूसरे से बेहतर है? धन्यवाद![NSThread detachNewThreadSelector:] और -performSelectorInBackground

उत्तर

31

वे समान हैं। documentation देखें।

performSelectorInBackground: withObject: इस विधि बुला के प्रभाव में एक ही रूप में यदि आप detachNewThreadSelector कहा जाता है: toTarget: withObject: वर्तमान वस्तु, चयनकर्ता, और पैरामीटर पैरामीटर के रूप में वस्तु के साथ NSThread की विधि।

+0

समझ में आता है कि, performSelectorInBackground के बाद से: withObject: toTarget: withObject: NSObject के अंतर्गत सूचीबद्ध है (NSThreadPerformAdditions) श्रेणी ... तो मैं यह सचमुच शर्त सिर्फ detachNewThreadSelector के लिए एक कॉल है पी – Sahil

+0

कृपया काफी करने के लिए सरल मेरी आखिरी टिप्पणी की उपेक्षा, मैं अपने पीछे से बात कर रहा था। – Emmanuel

5

जैसा कि माइकल कहते हैं, वे समान हैं। मुझे लगता है कि प्रदर्शन द्वारा चयन करने के लिए सिलेक्टर इनबैकग्राउंड: ऑब्जेक्ट: एनएसटीएचड के बजाय आसान तरीका है। withObject:

हालांकि, NSThread उसकी प्राथमिकता, stacksize, आदि को नियंत्रित आप व्यवहार को अनुकूलित करना चाहते हैं तो कर सकते हैं, मैं performSelectorInBackground के बजाय NSThread सलाह देते हैं।

2

दिलचस्प तुम लोग उन्हें

के बीच कोई मतभेद मैं तुम्हें इतना बता दूँगा बाहर बिंदु नहीं कर सकते। हमारे पास एक आईफोन ऐप है जो लॉक हो रहा था, जबकि हमने "इंटरनेट गतिविधि" शीर्ष बार में प्रकटीकरण आइकन और एक विंडो जो "भेज रहा है ..." भेजते समय हमने एक ऑडियो फ़ाइल को सर्वर पर भेजा और performSelectorInBackground: काम नहीं कर रहा था जब हमने performSelectorInBackground को detachNewThreadSelector के साथ बदल दिया, तो यह ठीक काम करता था लेकिन अब यह शिकायत करता है कि उस धागे में चल रहे autoreleased ऑब्जेक्ट्स पूल द्वारा जारी किए जा रहे हैं .. शायद ऐसा इसलिए है क्योंकि पूल मुख्य धागे में है?

+2

मुझे लगता है कि आपके पास प्रत्येक धागे के लिए एक ऑटोरेलीज पूल होना चाहिए। –

3

कोरी, यदि आप एक नए धागे पर चल रहे हैं और आप [ऑब्जेक्ट ऑटोरेलीज] का उपयोग कर रहे हैं, तो आपको अपना खुद का ऑटोोरलीज पूल बनाना होगा।

- (void)uploadDataOnThread 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    // do something here... 

    [pool release]; 
} 
+0

मुझे लगता है कि यह '[पूल नाली]' –

+0

रिलीज और नाली लगभग समान है: http://stackoverflow.com/a/799257/545726 – aiham

संबंधित मुद्दे