दिलचस्प पोस्ट
एक NullReferenceException क्या है, और मैं इसे कैसे ठीक करूँ? VBA.NET के समान तरीके से VBA में कक्षा ऑब्जेक्ट मॉड्यूल के बीच तुलना विधियों का उपयोग कैसे करें? आप PHP में वैकल्पिक तर्क कैसे बना सकते हैं? हाइबरनेट ऑरेकल अनुक्रम बड़े अंतर पैदा करता है मैं ब्राउज़र की चौड़ाई के आधार पर कैसे सीएसएस स्टाइलशीट को गतिशील रूप से समायोजित कर सकता हूं? 2 स्तंभ div लेआउट: सही चौड़ाई के साथ सही स्तंभ, बाईं तरल पदार्थ टेम्पलेट वर्ग सदस्य समारोह का स्पष्ट विशेषज्ञता टैगिंग के लिए डेटाबेस डिजाइन क्या सी प्रीप्रोसेसर स्ट्रिप टिप्पणी या पहले मैक्रोज़ का विस्तार करता है? क्या करता है -XX: MaxPermSize करते हैं? JQuery के माध्यम से एक asp.net सर्वर साइड विधि को कॉल करना मैं अपने कार्यक्रम की स्थिति कैसे बचा सकता हूं और फिर उसे लोड कर सकता हूं? आईफ़ोन कोडन ऑब्जेक्ट फ़ाइल प्रारूप अमान्य या अनुपयुक्त Qt निर्माता – परियोजना त्रुटि: Xcode ठीक से सेट नहीं है आपको / usr / bin / xcodebuild चालू कर लाइसेंस अनुबंध की पुष्टि करने की आवश्यकता हो सकती है पार्सल चला सकते हैं समानांतर में आदेश?

"क्लास विधि" और "स्टैटिक मेथड" के बीच अंतर क्या है?

मैंने कुछ अलग भाषाओं जैसे कि जावा, सी # और उद्देश्य-सी के साथ काम किया है

ज्यादातर भाषाओं में, ऐसे तरीकों की आवश्यकता होती है जिन्हें ऑब्जेक्ट के आवेश की आवश्यकता नहीं होती है जिन्हें स्थिर तरीके कहते हैं हालांकि, जब उद्देश्य-सी की बात आती है, तो कुछ लोगों को स्थिर तरीके से बचाते हैं, जब आप उन्हें स्थिर तरीके कहते हैं, और उन्हें उम्मीद है कि आप उन्हें कक्षा के तरीकों पर कॉल करेंगे।

उन्हें स्थैतिक तरीकों के बजाय कक्षा के तरीकों को क्यों कहा जाता है? एक स्थिर विधि और एक वर्ग पद्धति के बीच अंतर क्या है?

वेब के समाधान से एकत्रित समाधान ""क्लास विधि" और "स्टैटिक मेथड" के बीच अंतर क्या है?"

तो मेरा सवाल यह है कि उन्हें स्थैतिक पद्धति के बजाय कक्षा के तरीकों को क्यों कहा जाता है? एक स्थिर विधि और एक वर्ग पद्धति के बीच अंतर क्या है?

विकिपीडिया से: स्थैतिक तरीकों से न तो क्लास का एक उदाहरण आवश्यक है और ना ही इस तरह के एक उदाहरण के डेटा (या यह, स्वयं, मी, आदि) पर निहित रूप से प्रवेश कर सकते हैं।

यह वर्णन करता है कि उद्देश्य-सी के क्लास के तरीकों में क्या नहीं है

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

स्थैतिक तरीकों के विपरीत, उद्देश्य-सी वर्ग के तरीकों को विरासत में लिया जा सकता है (जो, उपरोक्त self होने के साथ संयोजन में, वास्तव में क्यों कई वर्ग अपने स्वयं के कस्टम कार्यान्वयन की आवश्यकता के बिना एक एकल, सरल, +alloc पर +alloc कार्यान्वयन कर सकते हैं) एक क्लास विधि सटीक वही objc_msgSend* आधारित प्रेषण तंत्र के माध्यम से किसी भी अन्य विधि कॉल साइट के माध्यम से objc_msgSend*

उद्देश्य-सी के क्लास के तरीकों को कक्षा के पदानुक्रम में ओवरराइड किया जा सकता है और उन्हें स्िज़ल किया जा सकता है। जिनमें से कोई भी भाषाओं में समर्थित नहीं है, जो आमतौर पर कक्षा के तरीकों के बजाय स्थैतिक तरीकों की पेशकश करते हैं।

निचला रेखा यह है कि स्थिर तरीके और कक्षा के तरीकों बहुत भिन्न हैं । हालांकि यह अंतर दिन-प्रतिदिन कोडिंग प्रयोजनों के लिए अधिकतर पारदर्शी होता है, फिर भी ऐसी परिस्थितियां हैं जहां जानने के तरीक़े कि क्लास के तरीकों से आपके द्वारा कोड की एक अनावश्यक लाइनों को कैसे बचा सकता है।

उदाहरण के लिए, आप इसे स्थिर तरीके से नहीं कर सकते:

 @interface AbstractClass:NSObject + factory; @end @implementation AbstractClass + factory { return [[[self alloc] init] autorelease]; } @end @interface Concrete1:AbstractClass @end @implementation Concrete1 @end @interface Concrete2:AbstractClass @end @implementation Concrete2 @end void foo() { Concrete1 *c = [Concrete1 factory]; Concrete2 *d = [Concrete2 factory]; ... etc ... } 

यद्यपि कक्षा के तरीकों और स्थैतिक तरीकों का व्यवहार उसी समय में होता है, लेकिन वे अलग-अलग होते हैं। स्थिर तरीकों के साथ क्लास नामस्थान क्वालीफायर के रूप में कार्य कर रहा है क्लास के तरीकों के साथ ही क्लास एक ऑब्जेक्ट होता है, और क्लास ऑब्जेक्ट के लिए क्लास मेथड्स बिल्कुल एक ही बात उदाहरण के तरीकों के उदाहरण हैं; एक परिणाम के रूप में आप निम्नलिखित कर सकते हैं

 @interface TestClass : NSObject + (void)classOrInstanceMethod; - (void)classOrInstanceMethod; @end ... NSArray * arr = [NSArray arrayWithObjects: [[[TestClass alloc] init] autorelease], [TestClass class], nil]; for( id obj in arr ) [obj classOrInstanceMethod]; 

classOrInstanceMethod के संस्करण को किस बात पर निर्भर करता है कि क्या obj एक क्लास ऑब्जेक्ट या उदाहरण है। यदि आप कारखाने वर्ग पैटर्न से परिचित हैं, तो यह पैटर्न उद्देश्य-सी भाषा का हिस्सा है।

क्योंकि यह गतिशील रूप से बाध्य है, स्थिर नहीं है

क्योंकि यह वाकई एक क्लास ऑब्जेक्ट का उदाहरण है

उद्देश्य-सी क्लास पद्धति वास्तव में एक ऑब्जेक्ट की क्लास ऑब्जेक्ट की इंस्टेंस विधि है।

पाठ के साथ वर्णन करना कठिन है अच्छा उदाहरण यहाँ देखें

http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html

यह विशुद्ध रूप से एक ऐतिहासिक अंतर है, मुख्यतः तथ्य-सी से सीखा जा रहा है कि उद्देश्य-सी को सी ++ के साथ समकालीन रूप से विकसित किया गया था, और सी ++ के बाद या बाद की भाषाओं जैसे जावा और सी # का बहुत प्रभाव था। उद्देश्य-सी मूलतः स्मॉलटाक ऑब्जेक्ट मॉडल का एक बंदरगाह सी के लिए था, इसलिए इसकी सिंटैक्स और शब्दावली को "सी-जैसे" के रूप में नहीं लगता है जैसा कि सी ++ द्वारा उपयोग किया गया था। हालांकि, उद्देश्य-सी "स्थैतिक विधि" शब्द का उपयोग न करके किसी प्रवृत्ति को आगे बढ़ाए बिना नहीं था, क्योंकि यह प्रथा 1983 में अच्छी तरह से स्थापित नहीं थी।