2009-09-25 21 views
12

मुझे इस तरह की कॉल [क्लास विधि] और एक चेतावनी है कि कक्षा "विधि" संदेश का जवाब नहीं दे सकती है।विशिष्ट रेखा पर एक्सकोड में चेतावनी को कैसे अक्षम करें?

"विधि" संदेश वास्तव में अस्तित्व में नहीं है लेकिन मेरा कोड अज्ञात संदेश का उपयोग (अग्रेषण टाइटफॉर चयनकर्ता का उपयोग करके) को पकड़ता है ताकि यह ठीक चल सके और यह उस तरह से चलाने के लिए बनाया गया है। मैं इस कष्टप्रद चेतावनी को कैसे छुपा सकता हूं?

उत्तर

16

तरह आप किसी ऑब्जेक्ट को संभवतः-लागू नहीं किया गया संदेश भेजने के लिए करना चाहते हैं, और आप जानते हैं कि आप असफलताओं को पकड़ने के लिए जा रहे हैं, तो आप मंगलाचरण का उपयोग करना चाहिए:

id myClone = [anObject performSelector:@selector(copy)]; 

घोषणा करता है कि आपका इरादा अधिक सीधे है कि आप एक ऐसी विधि को बुला रहे हैं जो मौजूद नहीं हो सकता है, और आप इसके साथ अच्छे हैं। विधि को चेतावनी या नकली दबाने के बजाय इसे करने का यह एक और स्पष्ट तरीका है।

+0

धन्यवाद। मुझे लगता है कि यह कम कुशल होगा हालांकि मुझे प्रत्येक कॉल पर चयनकर्ता बनाना है। जब तक मैं अपने सभी @ चयनकर्ता को और सभी के लिए घोषित नहीं करता। – CodeFlakes

+1

प्रदर्शन अंतर लगभग ज्ञानी नहीं होगा। यदि आप चिंतित हैं, तो इसे प्रोफाइल करें। समय से पहले अनुकूलन मत करो। –

+2

'प्रदर्शन चयनकर्ता' केवल उन विधियों के लिए काम करता है जिनके तर्क प्रकार और वापसी प्रकार सभी ऑब्जेक्ट्स हैं; और जिनके पास 'सुपर' पर एक विधि को कॉल करने के लिए 0, 1, या 2 तर्क – user102008

3

आप उस श्रेणी को घोषित करने वाली श्रेणी को परिभाषित कर सकते हैं। संकलन के समय दायरे में परिभाषा होने से चेतावनी से बचेंगी।

@interface MyClass (ShutUpTheCompilerMethods) 
- (void)method; 
@end 

... 

[MyClass method] //no warning here 
संबंधित मुद्दे