मेरी मॉडल कक्षा को इंटरनेट से कुछ डेटा प्राप्त करना है। तो मैंने इसे एक और थ्रेड पर चलाने का फैसला किया ताकि यूई फ्रीज न हो। एक वस्तु कुछ डेटा यह पहला मॉडल इस प्रकार का एक पद्धति का उपयोग करके पूछता चाहता है तो जब:किसी अन्य धागे से मुख्य धागे पर रन विधि
- (void)giveMeSomeData:(id)object withLabel:(id)label {
objectAsking= object;
theLabel= label;
NSThread* thread= [[NSThread alloc] initWithTarget:self selector:@selector(getTheDataFromInternet) object:nil];
[thread start];
}
- (void)getTheDataFromInternet {
//getting data...
theData= [dataFromInternet retain]; //this is the data the object asked for
[self returnObjectToAsker];
}
- (void)returnObjectToAsker {
[objectAsking receiveData:theData withLabel:theLabel];
}
मैं अभी भी एक नौसिखिया हूँ के रूप में, क्या आप मुझे बता सकते हैं अगर यह एक अच्छा पैटर्न है?
धन्यवाद!
मेमोरी प्रबंधन नियमों के अनुसार, जो भी आप बनाते हैं उसे छोड़ना न भूलें। http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html आपके द्वारा दिखाए गए कोड से, आपको स्वामित्व होना चाहिए और यदि जीसी के तहत नहीं चल रहा है, तो अंत में दोनों 'थ्रेड' और ' theData'। –
इसके अलावा, ऐसा लगता है कि 'getTheDataFromInternet' इतनी समकालिक रूप से करता है। ऐसा न करें- आप डेटा प्राप्त करने के लिए कई मिलीसेकंड/सेकंड/मिनट/घंटे/दिन के लिए अपने यूआई को अवरुद्ध कर देंगे। इससे कोई फर्क नहीं पड़ता कि यह कितना छोटा है, या आपका खुद का इंटरनेट कनेक्शन कितना भयानक है-डेटा के इंतजार के दौरान आपके उपयोगकर्ता आपके ऐप को लॉक कर देंगे। इसके बजाय, एसिंक्रोनस प्राप्त करने के लिए एक NSURLConnection बनाएं (और स्वयं) बनाएं: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/ एक कम से कम एक NSProgressIndicator का उपयोग करके प्रगति की रिपोर्ट करें। –
बेशक, मैंने स्पष्टता के लिए इन पंक्तियों को नहीं लिखने का फैसला किया;) –