2012-06-24 9 views
15

मैं इन सब सवालों की जाँच की है में कक्षा के तरीके का उद्देश्य ...उदाहरण के तरीके बनाम ऑब्जेक्टिव-सी

... और वे सभी बताते हैं कि कक्षा के साथ कक्षाओं और वर्ग विधियों के उदाहरणों पर उदाहरण विधियों का उपयोग कैसे किया जाता है, जब किसी वर्ग को संदेश भेजा जाता है। यह सहायक है, लेकिन मुझे जानने के लिए उत्सुकता है क्यों एक क्लास विधि बनाम एक उदाहरण विधि का उपयोग करेगा।

+0

[उद्देश्य-सी: कक्षा बनाम इंस्टेंस विधियों?] के संभावित डुप्लिकेट? (Http://stackoverflow.com/questions/1053592/objective-c-class-vs-instance-methods) –

उत्तर

45

आम तौर पर, आपको किसी ऑब्जेक्ट के विशिष्ट उदाहरण पर चलने वाले कोड की आवश्यकता होने पर इंस्टेंस विधियां बनाना चाहिए। जब आप उस वर्ग को सामान्य रूप से शामिल करते हैं, तो उस वर्ग की किसी विशिष्ट वस्तु पर काम नहीं करते हैं, तो आप एक क्लास विधि बनाते हैं।

प्रैक्टिस में, आप पाएंगे कि लगभग सभी विधियां उदाहरण विधियों होनी चाहिए। बस NSString, NSArray, UIView इत्यादि जैसी मौजूदा उद्देश्य-सी कक्षा पर नज़र डालें और आप देखेंगे कि उनके अधिकांश तरीके उदाहरण विधियां हैं। कक्षा विधियों का सबसे आम उपयोग (फिर, मैंने जो कक्षाओं का उल्लेख किया है) उन सुविधाओं के लिए हैं जो autorelease ऑब्जेक्ट्स, या सिंगलटन एक्सेसर्स लौटाते हैं।

NSString में length विधि पर विचार करें। यह एक उदाहरण विधि क्यों है और क्लास विधि नहीं है? यह एक उदाहरण विधि है क्योंकि यह केवल NSString के विशिष्ट उदाहरण से पूछने के लिए समझ में आता है कि इसकी लंबाई क्या है। लंबाई के लिए NSString सामान्य रूप से पूछना (यानी यदि लंबाई एक वर्ग विधि थी) कोई समझ नहीं लेगी।

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

+0

आप विधि पैरामीटर के बीच उलझन में हैं और ऑब्जेक्ट जिसका उपयोग विधि को कॉल करने के लिए किया जा रहा है (रिसीवर उर्फ)। मैं सुझाव देता हूं कि ऑनलाइन या किसी पुस्तक में कुछ पूर्ण उद्देश्य-सी ट्यूटोरियल देखें। – UIAdam

+0

अच्छी व्याख्या। लेकिन मुझे आश्चर्य है कि क्या यह अभी भी मायने रखता है जब से मैं इस पोस्ट को लिखता हूं, एआरसी पहले ही तस्वीर में है। – sooon

+0

बहुत अच्छी व्याख्या ... धन्यवाद :) – Nav