दिलचस्प पोस्ट
जावास्क्रिप्ट कोड सिर टैग में काम नहीं करता है एचटीएमएल 5 कैनवास पर एक ब्लररी सर्कल कैसे आकर्षित करें? टेम्पलेट क्लास कन्स्ट्रक्टर के "अपरिभाषित संदर्भ" कैसेंड्रा बंदरगाह का उपयोग – बंदरगाहों का उपयोग कैसे किया जाता है? जीसीडी के साथ UITableView के लिए छवियों का एसिंक्रोनस डाउनलोड करना जावा सरलडेटफ़ॉर्मैट ("य्याय-एमएम-डीडी'टीएचएच: मिमी: एसएस'ज़ '') टाइमज़ोन को आईएसटी के रूप में देता है मूल तत्वों को विरासत में लाने से बाल तत्व को रोकने के लिए CSS फ़ाइलों / निर्देशिकाओं की निगरानी सामग्री? JQuery AJAX सोप वेब सेवा उपभोग समूहीकृत परिणामों के प्रत्येक समूह के लिए शीर्ष एन रिकॉर्ड प्राप्त करें सी # ऐप में मेरे धागे के लिए एक से अधिक प्रोसेसर समूह का उपयोग करने में असमर्थ जांचें कि क्या एक PHP कुकी मौजूद है और यदि उसका मान सेट नहीं है विभिन्न कंटेनरों से इटेरेटर की तुलना करना जावास्क्रिप्ट Array.sort कार्यान्वयन? आकार c ++ गतिशील सरणी कैसे प्राप्त करें

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

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

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

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

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

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

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

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

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

स्थैतिक तरीकों के विपरीत, उद्देश्य-सी वर्ग के तरीकों को विरासत में लिया जा सकता है (जो, उपरोक्त 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 में अच्छी तरह से स्थापित नहीं थी।