2008-12-15 14 views
19

ओब्जे-सी कक्षाओं में सहायक/उपयोगिता कार्यों को शामिल करने का मानक तरीका क्या है?कोको में सहायक कार्य

आईई। सामान्य प्रयोजन कार्य जो पूरे आवेदन में उपयोग किए जाते हैं और 1 से अधिक कक्षाओं द्वारा बुलाए जाते हैं।

क्या ओबीजे-सी विधि कक्षा के बाहर मौजूद हो सकती है, या इस तरह के व्यवहार के लिए इसे सी फ़ंक्शन होने की आवश्यकता है?

उत्तर

6

ऑब्जेक्टिव-सी में इस के लिए विकल्प की एक संख्या हैं। सबसे पहले, चूंकि ओब्जे-सी सी का सख्त सुपरसेट है, इसलिए आप अपने सभी लाइब्रेरी फ़ंक्शंस को एक अलग मॉड्यूल (स्रोत फ़ाइल) में परिभाषित कर सकते हैं और खुशी से उन्हें किसी भी ओब्जे-सी ऑब्जेक्ट/कोड से कॉल कर सकते हैं जो आपके पास पहले से है। यदि आप obj-c स्रोत फ़ाइल (.m फ़ाइल) बनाते हैं तो आप ऑब्जेक्ट्स में वापस/उपयोग कर सकते हैं।

यदि आपके सामान्य कार्य तर्कसंगत रूप से अन्य, स्थापित वस्तुओं (उदाहरण के लिए, एनएसएसटींग पर संचालित होते हैं) में घुसपैठ कर रहे हैं, तो आप पहले से मौजूद मौजूदा वर्गों (जहां यह समझ में आता है) पर अपने कार्यों को ग्राफ़ करने के लिए श्रेणियों का उपयोग कर सकते हैं।

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

+1

यदि मैं एक .m फ़ाइल बनाता हूं, तो मुझे अभी भी कक्षा कार्यान्वयन के अंदर अपनी विधियां बनाना नहीं है? क्या क्लास कार्यान्वयन के बाहर ओब्जे-सी विधियों को परिभाषित करने का कोई तरीका है और कक्षा विधियों के रूप में आसानी से शामिल किया जा सकता है? – firstresponder

+0

मैंने NSObject के लिए एक श्रेणी बनाई है। यह मेरे लिए एटीएम के लिए अच्छा काम कर रहा है, हालांकि यह मेरे लिए पूरी तरह से सही नहीं लगता है कि मेरे सहायक कार्यों को मेरे आवेदन में प्रत्येक कक्षा में अवगत कराया जाना चाहिए। यह श्रेणी एनएसओब्जेक्ट में है क्योंकि इसे मेरे ऐप प्रतिनिधि और अन्य वर्गों में एक्सेस करने की आवश्यकता है। – firstresponder

+2

उन चीज़ों के लिए जिनके पास कोई वास्तविक श्रेणी या श्रेणी नहीं है, आप मानक सी फ़ंक्शंस का उपयोग कर सकते हैं। वे अभी भी वस्तुओं और संदर्भों का उपयोग कर सकते हैं। –

22

मैं एक सहायक वर्ग में स्थिर तरीकों के रूप में समान कार्यों को समूहित करता हूं। इन्हें क्लासनाम का उपयोग उदाहरण नाम के बजाय कहा जा सकता है। स्टेटिक विधियों को सामान्य के बजाय + के साथ परिभाषित किया जाता है -।

तो जैसे:

@interface HelperClass: superclassname { 
    // instance variables - none if all methods are static. 
} 

+ (void) helperMethod: (int) parameter_varName; 

@end 

यह बहुत की तरह कहा जा सकता है।

[HelperClass helperMethod: 10 ]; 

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

टोनी

+2

कक्षा के नाम आमतौर पर एक ऊपरी मामले से शुरू होना चाहिए (एक अच्छी शैली मार्गदर्शिका के लिए http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml देखें) – Michel

+1

इसके अलावा, विधि नाम लोअरकेस अक्षर से शुरू होना चाहिए , उदाहरण के लिए, helperMethod। –

+0

स्टाइल बस यही है .... यदि आप चाहें तो आप अपना खुद का अनूठा चुन सकते हैं ... अन्यथा इसे कानून कहा जाएगा .... "शैली" तोड़ने की भावना में मैंने इसे बदल दिया है। ;-) – AnthonyLambert

20

मुझे नहीं पता कि लोग कार्य बनाने से क्यों बच रहे हैं। उद्देश्य-सी सी का एक सुपरसेट है, जिसका अर्थ है कि सी इसका हिस्सा है। इसके अलावा, यह पूरी तरह से एकीकृत है- उनके बीच कोई दीवार नहीं है।

कार्य बनाएं! यह ठीक है! फाउंडेशन यह करता है। एप्लिकेशन किट यह करता है। कोर एनीमेशन यह करता है। कोर मीडिया यह करता है।

मुझे कोई कारण नहीं दिखता है।

+0

बिल्कुल! मुझे कोई कारण नहीं दिखता है। –

+0

मुझे लगता है कि आपने कभी बड़े सी विकास पर काम नहीं किया है? मुझे लगता है कि कक्षा में स्थिर विधि कहीं अधिक साफ है। 100 की फाइलों में 100 कार्यों के साथ एक ऐप की कल्पना करें। एक वर्ग का उपयोग करके उन्हें एक साथ समूहित किया जाता है और कोड को समझने के बाद आने वाले लोगों की सहायता करता है। – AnthonyLambert

+3

@ एंथनीलैम्बर्ट: जब वे उचित हों तो कक्षा वर्गों का विरोध नहीं कर रहा हूं। यह निश्चित रूप से बहुत अधिक कार्य करना संभव है, लेकिन यह भी कई वर्ग विधियों के लिए संभव है। यदि वे एक साथ हैं, तो वे एक ही कक्षा में होना चाहिए। यदि आप प्रत्येक के एक या दो तरीकों के लिए कक्षा के बाद कक्षा बना रहे हैं या असंबद्ध-संबंधित (या बदतर, अस्पष्ट नामित) वर्ग में असंबद्ध तरीकों को लंप कर रहे हैं, तो बस उन्हें कार्य करें। (चेतावनी संकेत: कोई उदाहरण विधि के साथ "MyFileUtilities" नामक एक वर्ग। बस उन्हें कार्य करें।) –