कोको (एपीआई): Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|MacOS framework}} {{Use mdy dates|date=October 2013}} {{Infobox software | name = Cocoa | logo = | developer...")
 
No edit summary
 
(9 intermediate revisions by 4 users not shown)
Line 16: Line 16:
| website                = {{URL|developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html|Apple Developer}}
| website                = {{URL|developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html|Apple Developer}}
}}
}}
Cocoa, Apple Inc. की नेटिव [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] | ऑब्जेक्ट-ओरिएंटेड [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (API) है, जो इसके [[डेस्कटॉप कंप्यूटर]] [[ऑपरेटिंग सिस्टम]] [[macOS]] के लिए है।
कोकोआ एप्पल की प्राकृत वस्तु अभिमुखित [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (एपीआई) है, जो इसके [[डेस्कटॉप कंप्यूटर]] [[ऑपरेटिंग सिस्टम|संचालन प्रणाली]] [[macOS|मैक ओएस]] के लिए है।


कोको में [[फाउंडेशन किट]], [[आवेदन किट]] और [[कोर डेटा]] फ्रेमवर्क शामिल हैं, जैसा कि इसमें शामिल है <code>Cocoa.h</code> हेडर फ़ाइल, और उनके द्वारा शामिल लाइब्रेरी और फ्रेमवर्क, जैसे सी मानक लाइब्रेरी और ऑब्जेक्टिव-सी रनटाइम।<ref name="apple1">[https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/SystemFrameworks/SystemFrameworks.html Mac Technology Overview: OS X Frameworks]. Developer.apple.com. Retrieved on September 18, 2013.</ref>
कोकोआ में [[फाउंडेशन किट]], [[आवेदन किट|एप्लिकेशन किट]] और [[कोर डेटा|केंद्र भाग डेटा]] प्राधार सम्मिलित हैं, जैसा कि इसमें<code>कोकोआ.एच</code>प्रवेशिका संचिका सम्मिलित है, और उनके द्वारा सम्मिलित पुस्तकालय और प्राधार, जैसे सी मानक पुस्तकालय और ऑब्जेक्टिव-सी कार्यावधि सम्मिलित है।<ref name="apple1">[https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/SystemFrameworks/SystemFrameworks.html Mac Technology Overview: OS X Frameworks]. Developer.apple.com. Retrieved on September 18, 2013.</ref>
कोको अनुप्रयोगों को आम तौर पर [[प्रोग्रामिंग भाषा]]ओं [[उद्देश्य सी]] या [[स्विफ्ट (प्रोग्रामिंग भाषा)]] का उपयोग करके Apple द्वारा प्रदान किए गए विकास टूल, विशेष रूप से [[Xcode]] (पूर्व में [[प्रोजेक्ट बिल्डर]]) [[प्रयोक्ता इंटरफ़ेस]] बिल्डर (अब Xcode का हिस्सा) का उपयोग करके विकसित किया जाता है। हालाँकि, कोको प्रोग्रामिंग वातावरण को अन्य उपकरणों का उपयोग करके एक्सेस किया जा सकता है। एक साधारण [[पाठ संपादक]] में ऑब्जेक्टिव-सी कोको प्रोग्राम लिखना भी संभव है और कमांड लाइन या [[बनाओ (सॉफ्टवेयर)]] से [[जीएनयू संकलक संग्रह]] (GCC) या [[बजना]] के साथ इसे मैन्युअल रूप से बनाना संभव है।


[[अंतिम उपयोगकर्ता]] के लिए, कोको [[अनुप्रयोग प्रक्रिया सामग्री]] वे हैं जो कोको प्रोग्रामिंग वातावरण का उपयोग करके लिखे गए हैं। इस तरह के अनुप्रयोगों में आमतौर पर एक परिचित रूप और अनुभव होता है, क्योंकि कोको प्रोग्रामिंग वातावरण बहुत सारे सामान्य उपयोगकर्ता इंटरफ़ेस (जैसे बटन, स्क्रॉल बार, आदि) प्रदान करता है, और Apple के [[मानव इंटरफ़ेस दिशानिर्देश]]ों का पालन करने के लिए एक एप्लिकेशन के कई पहलुओं को स्वचालित करता है।
कोकोआ अनुप्रयोगों को सामान्यतः [[प्रोग्रामिंग भाषा]]ओं [[उद्देश्य सी|ऑब्जेक्टिव सी]] या [[स्विफ्ट (प्रोग्रामिंग भाषा)]] का उपयोग करके एप्पल द्वारा प्रदान किए गए विकास टूल, विशेष रूप से [[Xcode|एक्स कूट]] (पूर्व में [[प्रोजेक्ट बिल्डर|परियोजना बिल्डर]]) [[प्रयोक्ता इंटरफ़ेस]] बिल्डर (अब [[Xcode|एक्स कूट]] का हिस्सा) का उपयोग करके विकसित किया जाता है। हालाँकि, कोकोआ प्रोग्रामिंग वातावरण को अन्य उपकरणों का उपयोग करके अभिगमन किया जा सकता है। एक साधारण [[पाठ संपादक]] में ऑब्जेक्टिव-सी कोकोआ प्रोग्राम लिखना भी संभव है और कमांड लाइन या [[बनाओ (सॉफ्टवेयर)|मेकफाइल (सॉफ्टवेयर)]] से [[जीएनयू संकलक संग्रह]] (जीसीसी) या [[बजना|क्लैंग]] के साथ इसे स्वतः रूप से बनाना संभव है।


[[आईओएस]], [[ipad]]ओएस, [[tvOS]] और वॉचओएस के लिए [[कोको टच]] नामक एक समान एपीआई मौजूद है, जिसमें इशारा पहचान, [[एनिमेशन]] और ग्राफिकल नियंत्रण तत्वों का एक अलग सेट शामिल है। इसका उपयोग Apple उपकरणों जैसे [[iPhone]], [[iPod Touch]], iPad, [[Apple TV]] और [[Apple Watch]] के लिए एप्लिकेशन सॉफ़्टवेयर में किया जाता है।
[[अंतिम उपयोगकर्ता|अंतिम प्रयोक्ता]] के लिए, कोकोआ [[अनुप्रयोग प्रक्रिया सामग्री]] वे हैं जो कोकोआ प्रोग्रामिंग वातावरण का उपयोग करके लिखे गए हैं। इस तरह के अनुप्रयोगों में सामान्यतः एक परिचित रूप और अनुभव होता है, क्योंकि कोकोआ प्रोग्रामिंग वातावरण बहुत सारे सामान्य उपयोगकर्ता अंतरापृष्ठ (जैसे बटन, स्क्रॉल बार, आदि) प्रदान करता है, और एप्पल के [[मानव इंटरफ़ेस दिशानिर्देश|मानव इंटरफ़ेस दिशानिर्देशों]] का पालन करने के लिए एक एप्लिकेशन के कई पहलुओं को स्वचालित करता है।
 
[[आईओएस]],आईपैड ओएस, [[tvOS|टीवीओएस]] और वॉचओएस के लिए [[कोको टच|कोकोआ टच]] नामक एक समान एपीआई उपस्थित है, जिसमें मुद्रा पहचान, [[एनिमेशन]] और ग्राफिकल नियंत्रण तत्वों का एक अलग सम्मुच्चय सम्मिलित है। इसका उपयोग एप्पल उपकरणों जैसे [[iPhone|आईफोन]],आईपॉड टच, आईपैड, [[Apple TV|एप्पल टीवी]] और [[Apple Watch|एप्पल वॉच]] के लिए एप्लिकेशन सॉफ़्टवेयर में किया जाता है।


== इतिहास ==
== इतिहास ==
{{further|History of macOS}}
{{further|मैकओएस का इतिहास}}
Cocoa 1980 और 1990 के दशक में [[NeXT]] द्वारा विकसित [[NeXTSTEP]] और OpenStep प्रोग्रामिंग वातावरण से कई [[सॉफ्टवेयर ढांचा]] (मुख्य रूप से ऐप किट और फाउंडेशन किट) के वंश को जारी रखता है। Apple ने दिसंबर 1996 में NeXT का अधिग्रहण किया, और बाद में Rhapsody (ऑपरेटिंग सिस्टम) ऑपरेटिंग सिस्टम पर काम करना शुरू कर दिया, जो OpenStep का प्रत्यक्ष उत्तराधिकारी था। ब्लू बॉक्स नामक [[क्लासिक मैक ओएस]] अनुप्रयोगों के लिए इसका अनुकरण आधार होना था। पुस्तकालयों और बाइनरी समर्थन के [[ओपनस्टेप]] आधार को येलो बॉक्स कहा गया। रैप्सोडी मैक ओएस एक्स में विकसित हुआ, और येलो बॉक्स कोको बन गया। इस प्रकार, कोको कक्षाएं एनएस अक्षरों से शुरू होती हैं, जैसे एनएसएसटींग या एनएसएआरएआरई। ये OpenStep फ्रेमवर्क, NeXTSTEP के लिए मूल स्वामित्व शब्द के लिए हैं।<ref>{{cite book|url=https://books.google.com/books?id=K8vUkpOXhN4C&q=NS+prefix|quote=Cocoa is an important inheritance from NeXT, as indicated by .. the "NS" prefix|title=Mac OS X Internals: A Systems Approach|author=Amit Singh|date=June 19, 2006|isbn=0-321-27854-2}}</ref>
 
OpenStep को विकसित करने में किए गए अधिकांश कार्य Mac OS X को विकसित करने के लिए लागू किए गए थे, कोको सबसे अधिक दिखाई देने वाला भाग था। हालाँकि, मतभेद मौजूद हैं। उदाहरण के लिए, नेक्स्टस्टेप और ओपनस्टेप ने टेक्स्ट और ग्राफिक्स के ऑन-स्क्रीन डिस्प्ले के लिए [[पोस्टस्क्रिप्ट प्रदर्शित करें]] का इस्तेमाल किया, जबकि कोको एप्पल के [[क्वार्ट्ज (ग्राफिक्स परत)]] पर निर्भर करता है (जो [[संवहन दस्तावेज़ स्वरूप]] (पीडीएफ) इमेजिंग मॉडल का उपयोग करता है, लेकिन इसकी अंतर्निहित तकनीक का नहीं)। कोको में इंटरनेट समर्थन का एक स्तर भी है, जिसमें NSURL और [[WebKit]] [[HTML]] कक्षाएं और अन्य शामिल हैं, जबकि OpenStep के पास NSFileHandle क्लासेस और [[बर्कले सॉकेट]]्स के माध्यम से प्रबंधित नेटवर्क कनेक्शन के लिए केवल अल्पविकसित समर्थन था।
कोकोआ 1980 और 1990 के दशक में [[NeXT|नेक्स्ट]] द्वारा विकसित [[NeXTSTEP|नेक्स्टस्टेप]] और ओपनस्टेप प्रोग्रामिंग वातावरण से कई [[सॉफ्टवेयर ढांचा]] (मुख्य रूप से ऐप किट और आधार किट) के वंश को जारी रखता है। एप्पल ने दिसंबर 1996 में नेक्स्ट का अधिग्रहण किया, और बाद में रैप्सोडी (संचालन प्रणाली) संचालन प्रणाली पर काम करना प्रारम्भ कर दिया, जो ओपनस्टेप का प्रत्यक्ष उत्तराधिकारी था। ब्लू बॉक्स नामक [[क्लासिक मैक ओएस|उत्कृष्ट मैक ओएस]] अनुप्रयोगों के लिए इसका अनुकरण आधार होना था। पुस्तकालयों और बाइनरी समर्थन के [[ओपनस्टेप]] आधार को येलो बॉक्स कहा गया। रैप्सोडी मैक ओएस एक्स में विकसित हुआ, और येलो बॉक्स कोकोआ बन गया। इस प्रकार, कोकोआ कक्षाएं एनएस अक्षरों से प्रारम्भ होती हैं, जैसे एनएसस्ट्रिंग या एनएसऐरे। ये ओपनस्टेप प्राधार, नेक्स्टस्टेप के लिए मूल स्वामित्व शब्द के लिए हैं।<ref>{{cite book|url=https://books.google.com/books?id=K8vUkpOXhN4C&q=NS+prefix|quote=Cocoa is an important inheritance from NeXT, as indicated by .. the "NS" prefix|title=Mac OS X Internals: A Systems Approach|author=Amit Singh|date=June 19, 2006|isbn=0-321-27854-2}}</ref>
 
ओपनस्टेप को विकसित करने में किए गए अधिकांश कार्य मैक ओएस एक्स को विकसित करने के लिए लागू किए गए थे, कोकोआ सबसे अधिक दिखाई देने वाला भाग था। हालाँकि, मतभेद उपस्थित हैं। उदाहरण के लिए, नेक्स्टस्टेप और ओपनस्टेप ने पाठ्य भाग और आलेखिकी के ऑन-स्क्रीन प्रदर्श के लिए [[पोस्टस्क्रिप्ट प्रदर्शित करें|प्रदर्श पोस्टस्क्रिप्ट]] का प्रयोग किया, जबकि कोकोआ एप्पल के [[क्वार्ट्ज (ग्राफिक्स परत)|क्वार्ट्ज (आलेखिकी परत)]] पर निर्भर करता है (जो [[संवहन दस्तावेज़ स्वरूप]] (पीडीएफ) प्रतिबिंबन प्रतिरूप का उपयोग करता है, लेकिन इसकी अंतर्निहित तकनीक का नहीं)। कोकोआ में इंटरनेट समर्थन का एक स्तर भी है, जिसमें एनएसयूआरएल और [[WebKit|वेबकिट]] [[HTML|एचटीएमएल]] कक्षाएं और अन्य सम्मिलित हैं, जबकि ओपनस्टेप के पास एनएसफाइलहैंडल क्लासेस और [[बर्कले सॉकेट]] के माध्यम से प्रबंधित संजाल संश्रय के लिए केवल अल्पविकसित समर्थन था।


परिणामी सॉफ्टवेयर ढांचे को शीघ्रता के लिए कोको नाम मिला, क्योंकि नाम पहले से ही Apple द्वारा ट्रेडमार्क किया गया था। नाम के इस वर्तमान उपयोग से पहले कई वर्षों तक, Apple के कोको ट्रेडमार्क की उत्पत्ति बच्चों के लिए एक मल्टीमीडिया प्रोजेक्ट डिज़ाइन एप्लिकेशन के नाम के रूप में हुई थी। एप्लिकेशन किडसिम नाम के तहत [[Apple उन्नत प्रौद्योगिकी समूह]] में स्टेजकास्ट क्रिएटर # इतिहास था, और फिर इसका नाम बदल दिया गया और कोको के रूप में ट्रेडमार्क किया गया। पीटर जेन्सेन द्वारा गढ़ा गया नाम, जिसे Apple के लिए कोको विकसित करने के लिए काम पर रखा गया था, का उद्देश्य बच्चों के लिए जावा को विकसित करना था, क्योंकि यह वेब पेजों में एम्बेडेड था।<ref>{{cite news|last1=Mardesich|first1=Jodi|title=A Sour Note in Apple's Rhapsody Once-Loyal Software Writers Wary of New OS as Crucial Conference Looms|url=http://nl.newsbank.com/nl-search/we/Archives?p_product=SJ&p_theme=sj&p_action=search&p_maxdocs=200&s_dispstring=allfields(Peter%20Jensen)%20AND%20date(1/1/1997%20to%201/1/1998)&p_field_date-0=YMD_date&p_params_date-0=date:B,E&p_text_date-0=1/1/1997%20to%201/1/1998)&p_field_advanced-0=&p_text_advanced-0=(%22Peter%20Jensen%22)&xcal_numdocs=20&p_perpage=10&p_sort=YMD_date:D&xcal_useweights=no|access-date=13 August 2015|agency=San Jose Mercury News|issue=Morning Final|date=April 14, 1997}}</ref> इस सॉफ़्टवेयर ढांचे के लिए एक नया [[ट्रेडमार्क]] पंजीकृत करते समय होने वाली देरी से बचने के लिए ट्रेडमार्क, और इस प्रकार कोको नाम का पुन: उपयोग किया गया था। [[स्टीव जॉब्स]] की एप्पल में वापसी के बाद हुए एक [[युक्तिकरण (अर्थशास्त्र)]] में से एक में मूल कोको कार्यक्रम को एप्पल में बंद कर दिया गया था। इसके बाद इसे तीसरे पक्ष को लाइसेंस दिया गया और 2014 तक [[स्टेजकास्ट निर्माता]] के रूप में विपणन किया गया।
परिणामी सॉफ्टवेयर ढांचे को शीघ्रता के लिए कोकोआ नाम मिला, क्योंकि नाम पहले से ही एप्पल द्वारा ट्रेडमार्क (व्यापार चिह्न) किया गया था। नाम के इस वर्तमान उपयोग से पहले कई वर्षों तक, एप्पल के कोकोआ ट्रेडमार्क की उत्पत्ति बच्चों के लिए एक बहुमाध्यमिक परियोजना अभिकल्पना एप्लिकेशन के नाम के रूप में हुई थी। एप्लिकेशन को मूल रूप से एप्पल अग्रिम प्रौद्योगिकियों ग्रुप में किडसिम नाम से विकसित किया गया था और फिर इसका नाम बदल दिया गया और कोकोआ के रूप में ट्रेडमार्क किया गया। पीटर जेन्सेन द्वारा गढ़ा गया नाम, जिसे एप्पल के लिए कोकोआ विकसित करने के लिए काम पर रखा गया था, का उद्देश्य बच्चों के लिए जावा को विकसित करना था, क्योंकि यह वेब पेजों में अंत: स्थापित था।<ref>{{cite news|last1=Mardesich|first1=Jodi|title=A Sour Note in Apple's Rhapsody Once-Loyal Software Writers Wary of New OS as Crucial Conference Looms|url=http://nl.newsbank.com/nl-search/we/Archives?p_product=SJ&p_theme=sj&p_action=search&p_maxdocs=200&s_dispstring=allfields(Peter%20Jensen)%20AND%20date(1/1/1997%20to%201/1/1998)&p_field_date-0=YMD_date&p_params_date-0=date:B,E&p_text_date-0=1/1/1997%20to%201/1/1998)&p_field_advanced-0=&p_text_advanced-0=(%22Peter%20Jensen%22)&xcal_numdocs=20&p_perpage=10&p_sort=YMD_date:D&xcal_useweights=no|access-date=13 August 2015|agency=San Jose Mercury News|issue=Morning Final|date=April 14, 1997}}</ref> इस सॉफ़्टवेयर ढांचे के लिए एक नया [[ट्रेडमार्क]] पंजीकृत करते समय होने वाली देरी से बचने के लिए ट्रेडमार्क, और कोकोआ नाम का इस प्रकार पुन: उपयोग किया गया था। [[स्टीव जॉब्स]] की एप्पल में वापसी के बाद हुए एक [[युक्तिकरण (अर्थशास्त्र)]] में से एक में मूल कोकोआ कार्यक्रम को एप्पल में बंद कर दिया गया था। इसके बाद इसे तीसरे पक्ष को अनुज्ञप्ति दी गई और 2014 तक [[स्टेजकास्ट निर्माता]] के रूप में विपणन किया गया।


== मेमोरी मैनेजमेंट ==
== स्मृति प्रबंधन ==
कोको पर्यावरण की एक विशेषता इसकी गतिशील रूप से आवंटित स्मृति के प्रबंधन के लिए सुविधा है। फाउंडेशन किट की एनएसओब्जेक्ट क्लास, जिसमें से अधिकांश वर्ग, विक्रेता और उपयोगकर्ता दोनों व्युत्पन्न होते हैं, स्मृति प्रबंधन के लिए एक [[संदर्भ गिनती]] योजना लागू करता है। ऑब्जेक्ट जो एनएसओब्जेक्ट रूट क्लास से प्राप्त होते हैं, प्रतिक्रिया देते हैं <code>retain</code> और <code>release</code> संदेश, और एक गिनती बनाए रखें। शीर्षक वाली एक विधि <code>retainCount</code> मौजूद है, लेकिन इसके नाम के विपरीत, आमतौर पर किसी वस्तु की सटीक प्रतिधारित संख्या नहीं लौटाएगा। यह मुख्य रूप से सिस्टम-स्तरीय उद्देश्यों के लिए उपयोग किया जाता है। Apple द्वारा इसे मैन्युअल रूप से आमंत्रित करने की अनुशंसा नहीं की जाती है।
कोकोआ पर्यावरण की एक विशेषता इसकी गतिशील रूप से आवंटित स्मृति के प्रबंधन के लिए सुविधा है। फाउंडेशन किट की एनएसओब्जेक्ट क्लास, जिसमें से अधिकांश वर्ग, विक्रेता और उपयोगकर्ता दोनों व्युत्पन्न होते हैं, स्मृति प्रबंधन के लिए एक [[संदर्भ गिनती]] योजना लागू करता है। ऑब्जेक्ट जो एनएसओब्जेक्ट रूट क्लास से प्राप्त होते हैं, <code>रीटेन</code>और <code>रिलीज</code> संदेश प्रतिक्रिया देते हैं, और एक गिनती बनाए रखते हैं। <code>रीटेनकाउंट</code>शीर्षक वाली एक विधि उपस्थित है, लेकिन इसके नाम के विपरीत, सामान्यतः किसी वस्तु की सटीक प्रतिधारित संख्या नहीं लौटाएगा। यह मुख्य रूप से प्रणाली-स्तरीय उद्देश्यों के लिए उपयोग किया जाता है। एप्पल द्वारा इसे स्वतः रूप से आमंत्रित करने की अनुशंसा नहीं की जाती है।


के साथ बनाई गई एक नई आवंटित वस्तु <code>alloc</code> या <code>copy</code> एक की गिनती बरकरार है। उस वस्तु को भेजना a <code>retain</code> मैसेज भेजने के दौरान रिटेन काउंट बढ़ा देता है a <code>release</code> संदेश रिटेन काउंट को घटाता है। जब किसी ऑब्जेक्ट की रिटेन काउंट शून्य तक पहुँच जाता है, तो इसे C++ डिस्ट्रक्टर के समान प्रक्रिया द्वारा हटा दिया जाता है। <code>dealloc</code> बुलाए जाने की गारंटी नहीं है।
<code>अलोक</code> या <code>कॉपी</code>के साथ बनाई गई नई आवंटित वस्तु एक की गिनती प्रतिधारित है। उस ऑब्जेक्ट को एक रिटेन मैसेज भेजने से रिटेन काउंट बढ़ जाता है, जबकि इसे रिलीज़ मैसेज भेजने से रिटेन काउंट घट जाता है। जब किसी ऑब्जेक्ट की रिटेन काउंट शून्य तक पहुँच जाता है, तो इसे सी++ डिस्ट्रक्टर के समान प्रक्रिया द्वारा हटा दिया जाता है।<code>डीअलोक</code>बुलाए जाने की प्रत्याभुति नहीं है।


ऑब्जेक्टिव-सी 2.0 से शुरू करते हुए, ऑब्जेक्टिव-सी रनटाइम ने एक वैकल्पिक ऑब्जेक्टिव-सी#गारबेज कलेक्शन लागू किया, जो अब अप्रचलित है और [[स्वचालित संदर्भ गिनती]] (एआरसी) के पक्ष में बहिष्कृत है। इस मॉडल में, रनटाइम ने कोको रेफरेंस काउंटिंग ऑपरेशंस जैसे रिटेन और रिलीज को नो-ऑप्स में बदल दिया। ऑब्जेक्टिव-सी 2.0 के आईओएस कार्यान्वयन पर कचरा संग्रहकर्ता मौजूद नहीं है। ऑब्जेक्टिव-सी में कचरा संग्रह कम प्राथमिकता वाले बैकग्राउंड थ्रेड पर चलता है, और उपयोगकर्ता अनुभव को उत्तरदायी बनाए रखने के इरादे से कोको के उपयोगकर्ता ईवेंट पर रोक लगा सकता है। पुराने गारबेज संग्राहक अभी भी Mac OS X संस्करण 10.13 पर उपलब्ध है, लेकिन Apple द्वारा प्रदान किया गया कोई भी एप्लिकेशन इसका उपयोग नहीं करता है।
ऑब्जेक्टिव-सी 2.0 से प्रारम्भ करते हुए, ऑब्जेक्टिव-सी कार्यावधि ने एक वैकल्पिक कचरा संग्रहण लागू किया, जो अब अप्रचलित है और [[स्वचालित संदर्भ गिनती]] (एआरसी) के पक्ष में बहिष्कृत है। इस प्रतिरूप में, कार्यावधि ने कोकोआ रेफरेंस काउंटिंग ऑपरेशंस जैसे रिटेन और रिलीज को नो-ऑप्स में बदल दिया। ऑब्जेक्टिव-सी 2.0 के आईओएस कार्यान्वयन पर कचरा संग्रहकर्ता उपस्थित नहीं है। ऑब्जेक्टिव-सी में कचरा संग्रह कम प्राथमिकता वाले बैकग्राउंड थ्रेड पर चलता है, और उपयोगकर्ता अनुभव को उत्तरदायी बनाए रखने के इरादे से कोकोआ के उपयोगकर्ता ईवेंट पर रोक लगा सकता है। पुराने गारबेज संग्राहक अभी भी मैक ओएस एक्स संस्करण 10.13 पर उपलब्ध है, लेकिन एप्पल द्वारा प्रदान किया गया कोई भी एप्लिकेशन इसका उपयोग नहीं करता है।


2011 में, [[एलएलवीएम]] कंपाइलर ने ऑटोमैटिक रेफरेंस काउंटिंग (एआरसी) की शुरुआत की, जो ऑब्जेक्टिव-सी सोर्स कोड का स्थिर विश्लेषण करके और आवश्यकतानुसार संदेशों को बनाए रखने और जारी करने के लिए पारंपरिक कचरा कलेक्टर को बदल देता है।
2011 में, [[एलएलवीएम]] कंपाइलर ने ऑटोमैटिक संदर्भ काउंटिंग (एआरसी) को प्रारम्भ किया, जो ऑब्जेक्टिव-सी स्रोत कूट का स्थिर विश्लेषण करके और आवश्यकतानुसार संदेशों को बनाए रखने और जारी करने के लिए पारंपरिक कचरा समाहर्ता को बदल देता है।


== मुख्य चौखटे ==
== मुख्य चौखटे ==
कोको में तीन ऑब्जेक्टिव-सी ऑब्जेक्ट लाइब्रेरी होते हैं जिन्हें [[आवेदन ढांचा]] कहा जाता है। फ्रेमवर्क कार्यात्मक रूप से [[पुस्तकालय (कंप्यूटर विज्ञान)]] के समान हैं, एक संकलित वस्तु जिसे रनटाइम पर प्रोग्राम के एड्रेस स्पेस में गतिशील रूप से लोड किया जा सकता है, लेकिन फ्रेमवर्क संबंधित संसाधनों, हेडर फाइलों और प्रलेखन को जोड़ता है। कोको ढांचे को एक प्रकार के [[बंडल (macOS)]] के रूप में कार्यान्वित किया जाता है, जिसमें मानक स्थानों में उपरोक्त आइटम शामिल होते हैं।
कोकोआ में तीन ऑब्जेक्टिव-सी ऑब्जेक्ट पुस्तकालय होते हैं जिन्हें [[आवेदन ढांचा]] कहा जाता है। प्राधार कार्यात्मक रूप से [[पुस्तकालय (कंप्यूटर विज्ञान)]] के समान हैं, एक संकलित वस्तु जिसे कार्यावधि पर प्रोग्राम के एड्रेस स्पेस में गतिशील रूप से उद्भार किया जा सकता है, लेकिन प्राधार संबंधित संसाधनों, हेडर फाइलों और प्रलेखन को जोड़ता है। कोकोआ ढांचे को एक प्रकार के [[बंडल (macOS)|बंडल (मैक ओएस)]] के रूप में कार्यान्वित किया जाता है, जिसमें मानक स्थानों में उपरोक्त वस्तु सम्मिलित होते हैं।


* फाउंडेशन किट (फाउंडेशन), पहली बार NeXTSTEP 3 पर एंटरप्राइज़ ऑब्जेक्ट फ्रेमवर्क में दिखाई दिया।<ref>[http://www.cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/HybridWorld.htmld/index.html HybridWorld]. Cilinder.be. Retrieved on September 18, 2013.</ref> इसे OpenStep कार्य के हिस्से के रूप में विकसित किया गया था, और बाद में OpenStep के AppKit के लिए आधार बन गया जब वह सिस्टम 1994 में जारी किया गया था। macOS पर, Foundation [[Core Foundation]] पर आधारित है। फाउंडेशन एक सामान्य वस्तु-उन्मुख पुस्तकालय है जो [[स्ट्रिंग (कंप्यूटर विज्ञान)]] और मूल्य हेरफेर, [[कंटेनर (डेटा संरचना)]] और पुनरावृत्ति, वितरित कंप्यूटिंग, [[घटना पाश]] (रन लूप) और अन्य फ़ंक्शन प्रदान करता है जो सीधे [[ग्राफिकल यूज़र इंटरफ़ेस]] से बंधे नहीं हैं। एनएस उपसर्ग, सभी वर्गों और ढांचे में [[स्थिर (प्रोग्रामिंग)]] के लिए उपयोग किया जाता है, कोको की ओपेनस्टेप विरासत से आता है, जिसे नेक्स्ट और [[सन माइक्रोसिस्टम्स]] द्वारा संयुक्त रूप से विकसित किया गया था।
* फाउंडेशन किट (फाउंडेशन), पहली बार नेक्स्टस्टेप 3 पर एंटरप्राइज़ ऑब्जेक्ट प्राधार में दिखाई दिया।<ref>[http://www.cilinder.be/docs/next/NeXTStep/3.3/nd/Foundation/HybridWorld.htmld/index.html HybridWorld]. Cilinder.be. Retrieved on September 18, 2013.</ref> इसे ओपनस्टेप कार्य के हिस्से के रूप में विकसित किया गया था, और बाद में ओपनस्टेप के ऐपकिट के लिए आधार बन गया जब वह प्रणाली 1994 में जारी किया गया था। मैक ओएस पर, आधार [[Core Foundation|कोर फाउंडेशन]] पर आधारित है। फाउंडेशन एक सामान्य वस्तु-उन्मुख पुस्तकालय है जो [[स्ट्रिंग (कंप्यूटर विज्ञान)]] और मूल्य प्रहस्तन, [[कंटेनर (डेटा संरचना)]] और पुनरावृत्ति, वितरित कंप्यूटिंग, [[घटना पाश]] (रन लूप) और अन्य फ़ंक्शन प्रदान करता है जो सीधे [[ग्राफिकल यूज़र इंटरफ़ेस|आलेखी प्रयोक्ता अंतराफलक]] से बंधे नहीं हैं। एनएस उपसर्ग, सभी वर्गों और ढांचे में [[स्थिर (प्रोग्रामिंग)]] के लिए उपयोग किया जाता है, कोकोआ की ओपेनस्टेप विरासत से आता है, जिसे नेक्स्ट और [[सन माइक्रोसिस्टम्स|सन माइक्रोप्रणाली्स]] द्वारा संयुक्त रूप से विकसित किया गया था।
* एप्लिकेशन किट (AppKit) सीधे मूल NeXTSTEP एप्लिकेशन किट से ली गई है। इसमें कोड प्रोग्राम शामिल हैं जिनका उपयोग ग्राफिकल यूजर इंटरफेस बनाने और बातचीत करने के लिए किया जा सकता है। ऐपकिट फाउंडेशन के शीर्ष पर बनाया गया है, और उसी एनएस उपसर्ग का उपयोग करता है।
* एप्लिकेशन किट (ऐपकिट) सीधे मूल नेक्स्टस्टेप एप्लिकेशन किट से ली गई है। इसमें कूट प्रोग्राम सम्मिलित हैं जिनका उपयोग आलेखी प्रयोक्ता अंतराफलक बनाने और परस्पर प्रभाव करने के लिए किया जा सकता है। ऐपकिट फाउंडेशन के शीर्ष पर बनाया गया है, और उसी एनएस उपसर्ग का उपयोग करता है।
* कोर डेटा फाउंडेशन और कोको के साथ शामिल ऑब्जेक्ट पर्सिस्टेंस फ्रेमवर्क है और Cocoa.h में पाया जाता है।<ref name="apple1"/>
* कोर डेटा फाउंडेशन और कोकोआ के साथ सम्मिलित वस्तु दृढ़ता ढांचा है और कोकोआ.एच में पाया जाता है।<ref name="apple1"/>


कोको वास्तुकला का एक महत्वपूर्ण हिस्सा इसका व्यापक दृश्य मॉडल है। यह एक एप्लिकेशन फ्रेमवर्क के लिए पारंपरिक लाइनों के साथ आयोजित किया गया है, लेकिन यह क्वार्ट्ज (ग्राफिक्स परत) द्वारा प्रदान किए गए पोर्टेबल डॉक्यूमेंट फॉर्मेट (पीडीएफ) ड्राइंग मॉडल पर आधारित है। यह [[परिशिष्ट भाग]]-जैसी ड्राइंग कमांड का उपयोग करके कस्टम ड्राइंग सामग्री बनाने की अनुमति देता है, जो स्वचालित प्रिंटर समर्थन आदि की भी अनुमति देता है। चूंकि कोको फ्रेमवर्क सभी क्लिपिंग, स्क्रॉलिंग, स्केलिंग और ड्राइंग ग्राफिक्स के अन्य कामों का प्रबंधन करता है, इसलिए प्रोग्रामर बुनियादी ढांचे को लागू करने से मुक्त हो जाता है और किसी एप्लिकेशन की सामग्री के अनूठे पहलुओं पर ध्यान केंद्रित कर सकता है।
कोकोआ वास्तुकला का एक महत्वपूर्ण हिस्सा इसका व्यापक दृश्य प्रतिरूप है। यह एक एप्लिकेशन प्राधार के लिए पारंपरिक प्रणालियों के साथ आयोजित किया गया है, लेकिन यह क्वार्ट्ज (आलेखिकी परत) द्वारा प्रदान किए गए पोर्टेबल डॉक्यूमेंट फॉर्मेट (पीडीएफ) ड्राइंग प्रतिरूप पर आधारित है। यह [[परिशिष्ट भाग]]-जैसी ड्राइंग कमांड का उपयोग करके कस्टम ड्राइंग सामग्री बनाने की अनुमति देता है, जो स्वचालित प्रिंटर समर्थन आदि की भी अनुमति देता है। चूंकि कोकोआ प्राधार सभी क्लिपिंग, स्क्रॉलिंग, स्केलिंग और ड्राइंग आलेखिकी के अन्य कामों का प्रबंधन करता है, इसलिए प्रोग्रामर बुनियादी ढांचे को लागू करने से स्वतंत्र हो जाता है और किसी एप्लिकेशन की सामग्री के अनूठे पहलुओं पर ध्यान केंद्रित कर सकता है।


== मॉडल-व्यू-कंट्रोलर ==
== प्रतिरूप-दृश्य-नियंत्रक ==
{{Main article|Model–view–controller}}
{{Main article|प्रतिरूप-दृश्य-नियंत्रक}}
[[ज़ेरॉक्स PARC]] में स्मॉलटाक टीमें अंततः एक डिज़ाइन दर्शन पर बस गईं जिससे आसान विकास और उच्च कोड पुन: उपयोग हुआ। नामांकित मॉडल-व्यू-कंट्रोलर (MVC), अवधारणा एक एप्लिकेशन को इंटरेक्टिंग ऑब्जेक्ट क्लास के तीन सेटों में विभाजित करती है:
[[ज़ेरॉक्स PARC|ज़ेरॉक्स पार्क]] में स्मॉलटाक टीमें अंततः एक अभिकल्पना धारणा पर व्यवस्थित हो गईं जिससे आसान विकास और उच्च कूट पुन: उपयोग हुआ। नामांकित प्रतिरूप-व्यू-नियंत्रक (एमवीसी), अवधारणा एक एप्लिकेशन को इंटरेक्टिंग ऑब्जेक्ट क्लास के तीन सम्मुच्चयों में विभाजित करती है:


* मॉडल वर्ग समस्या डोमेन डेटा और संचालन का प्रतिनिधित्व करते हैं (जैसे कि लोगों/विभागों/बजटों की सूची; अनुभागों/अनुच्छेदों/शैलीकृत पाठ के फुटनोट वाले दस्तावेज़)।
* प्रतिरूप वर्ग समस्या कार्यक्षेत्र डेटा और संचालन का प्रतिनिधित्व करते हैं (जैसे कि लोगों/विभागों/बजटों की सूची; अनुभागों/अनुच्छेदों/शैलीकृत पाठ के फुटनोट वाले दस्तावेज़)।
* देखें कक्षाएं मानव-कंप्यूटर इंटरैक्शन के लिए दृश्य प्रतिनिधित्व और खर्च को लागू करती हैं (जैसे कैप्शन वाले आइकन के स्क्रॉल करने योग्य ग्रिड और संभावित संचालन के पॉप-अप मेनू)।
* देखें कक्षाएं मानव-कंप्यूटर परस्पर क्रिया के लिए दृश्य प्रतिनिधित्व और शक्यता को लागू करती हैं (जैसे कैप्शन वाले आइकन के स्क्रॉल करने योग्य ग्रिड और संभावित संचालन के पॉप-अप मेनू)।
* कंट्रोलर क्लासेस में लॉजिक होता है जो मॉडल डेटा को व्यू रिप्रेजेंटेशन के रूप में सरफेस करता है, मॉडल ऑपरेशंस के लिए अफोर्डेंस-आरंभ किए गए यूजर एक्शन को मैप करता है, और दोनों को सिंक्रोनाइज़ करने के लिए स्टेट को बनाए रखता है।
* नियंत्रक क्लासेस में तर्क होता है जो प्रतिरूप डेटा को व्यू रिप्रेजेंटेशन के रूप में बहिस्तल करता है, प्रतिरूप ऑपरेशंस के लिए अफोर्डेंस-आरंभ किए गए यूजर एक्शन को प्रतिचित्र करता है, और दोनों को समकालिक करने के लिए स्टेट को बनाए रखता है।


कोको का डिज़ाइन एमवीसी सिद्धांतों का एक निष्पक्ष, लेकिन बिल्कुल सख्त अनुप्रयोग नहीं है। ओपनस्टेप के तहत, प्रदान की गई अधिकांश कक्षाएं या तो उच्च-स्तरीय व्यू क्लासेस (ऐपकिट में) थीं या एनएसएसटींग जैसे अपेक्षाकृत निम्न-स्तरीय मॉडल वर्गों में से एक थीं। समान MVC सिस्टम की तुलना में, OpenStep में एक मजबूत मॉडल परत का अभाव था। उदाहरण के लिए, कोई स्टॉक क्लास दस्तावेज़ का प्रतिनिधित्व नहीं करता है। कोको में संक्रमण के दौरान, डेस्कटॉप अनुप्रयोगों के लिए सामान्य कार्यक्षमता प्रदान करने के लिए कई पूर्व-लुढ़का वर्गों को पेश करते हुए, मॉडल परत का विस्तार किया गया था।
कोकोआ का अभिकल्पना एमवीसी सिद्धांतों का एक निष्पक्ष, लेकिन बिल्कुल कठोर अनुप्रयोग नहीं है। ओपनस्टेप के अनुसार, प्रदान की गई अधिकांश कक्षाएं या तो उच्च-स्तरीय व्यू क्लासेस (ऐपकिट में) थीं या एनएसस्ट्रिंग जैसे अपेक्षाकृत निम्न-स्तरीय प्रतिरूप वर्गों में से एक थीं। समान एमवीसी प्रणाली की तुलना में, ओपनस्टेप में एक सुदृढ़ प्रतिरूप परत का अभाव था। उदाहरण के लिए, कोई स्टॉक क्लास दस्तावेज़ का प्रतिनिधित्व नहीं करता है। कोकोआ में संक्रमण के दौरान, डेस्कटॉप अनुप्रयोगों के लिए सामान्य कार्यक्षमता प्रदान करने के लिए कई पूर्व-बेल्लित वर्गों को प्रस्तुत करते हुए, प्रतिरूप परत का विस्तार किया गया था।


मैक ओएस एक्स 10.3 में, ऐप्पल ने वर्गों के एनएससीकंट्रोलर परिवार की शुरुआत की, जो नियंत्रक परत के लिए पूर्वनिर्धारित व्यवहार प्रदान करते हैं। इन वर्गों को [[कोको बाइंडिंग्स]] सिस्टम का हिस्सा माना जाता है, जो [[की-वैल्यू ऑब्जर्विंग]] और [[की-वैल्यू बाइंडिंग]] जैसे प्रोटोकॉल का व्यापक उपयोग करता है। शब्द 'बाध्यकारी' दो वस्तुओं के बीच संबंध को संदर्भित करता है, अक्सर एक दृश्य और एक नियंत्रक के बीच। बाइंडिंग, डेवलपर को ठीक-ठाक व्यवहार करने के बजाय घोषणात्मक संबंधों पर अधिक ध्यान केंद्रित करने की अनुमति देती है।
मैक ओएस एक्स 10.3 में, ऐप्पल ने वर्गों के एनएससीनियंत्रक परिवार को प्रारम्भ किया, जो नियंत्रक परत के लिए पूर्वनिर्धारित व्यवहार प्रदान करते हैं। इन वर्गों को [[कोको बाइंडिंग्स|कोकोआ अनुबंधन]] प्रणाली का हिस्सा माना जाता है, जो [[की-वैल्यू ऑब्जर्विंग|महत्वपूर्ण मूल्य अवलोकन]] और [[की-वैल्यू बाइंडिंग|महत्वपूर्ण मूल्य]] [[कोको बाइंडिंग्स|अनुबंधन]] जैसी विज्ञप्ति का व्यापक उपयोग करता है। शब्द 'बाध्यकारी' दो वस्तुओं प्रायः एक दृश्य और एक नियंत्रक के बीच संबंध को संदर्भित करता है। अनुबंधन, विकासक को ठीक-ठाक व्यवहार करने के स्थान पर घोषणात्मक संबंधों पर अधिक ध्यान केंद्रित करने की अनुमति देती है।


Mac OS X 10.4 के आगमन के साथ, Apple ने कोर डेटा फ्रेमवर्क की शुरुआत करके इस नींव को और आगे बढ़ाया, जो मॉडल परत में परिवर्तन ट्रैकिंग और दृढ़ता को मानकीकृत करता है। असल में, ढांचा एप्लिकेशन डेटा में परिवर्तन करने की प्रक्रिया को बहुत सरल करता है, जब आवश्यक हो तो परिवर्तनों को पूर्ववत करता है, डेटा को डिस्क में सहेजता है, और इसे वापस पढ़ता है।
मैक ओएस एक्स 10.4 के आगमन के साथ, एप्पल ने कोर डेटा प्राधार को प्रारम्भ करके इस नींव को और आगे बढ़ाया, जो प्रतिरूप परत में परिवर्तन अनुवर्तन और दृढ़ता को मानकीकृत करता है। असल में, ढांचा एप्लिकेशन डेटा में परिवर्तन करने की प्रक्रिया को बहुत सरल करता है, जब आवश्यक हो तो परिवर्तनों को पूर्ववत करता है, डेटा को डिस्क में सहेजता है, और इसे वापस पढ़ता है।


सभी तीन MVC डोमेन के लिए फ्रेमवर्क समर्थन प्रदान करने में, Apple का लक्ष्य बॉयलरप्लेट या ग्लू कोड की मात्रा को कम करना है, जिसे डेवलपर्स को एप्लिकेशन-विशिष्ट सुविधाओं पर समय बिताने के लिए संसाधनों को मुक्त करके लिखना है।
सभी तीन एमवीसी कार्यक्षेत्र के लिए प्राधार समर्थन प्रदान करने में, एप्पल का लक्ष्य बॉयलरप्लेट या ग्लू कूट की मात्रा को कम करना है, जिसे विकासकों को एप्लिकेशन-विशिष्ट सुविधाओं पर समय बिताने के लिए संसाधनों को मुक्त करके लिखना है।


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


उद्देश्य-सी के तहत, विधियों को एक चयनकर्ता द्वारा दर्शाया जाता है, एक स्ट्रिंग जो कॉल करने की विधि का वर्णन करती है। जब कोई संदेश भेजा जाता है, तो चयनकर्ता को ऑब्जेक्टिव-सी रनटाइम में भेजा जाता है, उपलब्ध विधियों की सूची से मिलान किया जाता है, और विधि के कार्यान्वयन को कहा जाता है। चूंकि चयनकर्ता पाठ डेटा है, यह इसे एक फ़ाइल में सहेजा जा सकता है, एक नेटवर्क पर या प्रक्रियाओं के बीच प्रसारित किया जा सकता है, या अन्य तरीकों से हेरफेर किया जा सकता है। विधि के कार्यान्वयन को रनटाइम पर देखा जाता है, संकलन समय पर नहीं। इसके लिए एक छोटा प्रदर्शन दंड है,<ref>[[Wikibooks:Programming Mac OS X with Cocoa for beginners/Objective C, the language and its advantages#Some Objective-C advantages|Wikibooks - Some Objective-C advantages]]</ref> लेकिन देर से बाध्यकारी एक ही चयनकर्ता को विभिन्न कार्यान्वयनों को संदर्भित करने की अनुमति देता है।
उद्देश्य-सी के अनुसार, विधियों को एक चयनकर्ता द्वारा दर्शाया जाता है, एक स्ट्रिंग जो कॉल करने की विधि का वर्णन करती है। जब कोई संदेश भेजा जाता है, तो चयनकर्ता को ऑब्जेक्टिव-सी कार्यावधि में भेजा जाता है, उपलब्ध विधियों की सूची से मिलान किया जाता है, और विधि के कार्यान्वयन को कहा जाता है। चूंकि चयनकर्ता पाठ डेटा है, यह इसे एक संचिका में सहेजा जा सकता है, एक संजाल पर या प्रक्रियाओं के बीच प्रसारित किया जा सकता है, या अन्य तरीकों से प्रहस्तन किया जा सकता है। विधि के कार्यान्वयन को कार्यावधि पर देखा जाता है, संकलन समय पर नहीं। इसके लिए एक छोटा प्रदर्शन दंड है,<ref>[[Wikibooks:Programming Mac OS X with Cocoa for beginners/Objective C, the language and its advantages#Some Objective-C advantages|Wikibooks - Some Objective-C advantages]]</ref> लेकिन देर से बाध्यकारी एक ही चयनकर्ता को विभिन्न कार्यान्वयनों को संदर्भित करने की अनुमति देता है।


इसी तरह के टोकन से, कोको कुंजी-मूल्य कोडिंग (केवीसी) नामक एक व्यापक डेटा मैनिपुलेशन विधि प्रदान करता है।<ref>{{Cite web |url=https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/ |title=Key-Value Coding Programming Guide |access-date=September 27, 2021}}</ref> यह डेटा के एक टुकड़े या किसी वस्तु की संपत्ति को रनटाइम पर नाम से देखने या बदलने की अनुमति देता है। संपत्ति का नाम मूल्य की कुंजी के रूप में कार्य करता है। पारंपरिक भाषाओं में, यह देर से बंधना असंभव है। केवीसी महान डिजाइन लचीलेपन की ओर ले जाता है। एक वस्तु के प्रकार को ज्ञात करने की आवश्यकता नहीं है, फिर भी केवीसी का उपयोग करके उस वस्तु की किसी भी संपत्ति की खोज की जा सकती है। इसके अलावा, इस प्रणाली को कुछ कोको शब्द कुंजी-मूल्य अवलोकन (केवीओ) का उपयोग करके विस्तारित करके, [[पूर्ववत]] करने के लिए स्वत: समर्थन प्रदान किया जाता है।
इसी तरह के टोकन से, कोकोआ कुंजी-मूल्य कूटिंग (केवीसी) नामक एक व्यापक डेटा प्रहस्तन विधि प्रदान करता है।<ref>{{Cite web |url=https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/ |title=Key-Value Coding Programming Guide |access-date=September 27, 2021}}</ref> यह डेटा के एक टुकड़े या किसी वस्तु की संपत्ति को कार्यावधि पर नाम से देखने या बदलने की अनुमति देता है। संपत्ति का नाम मूल्य की कुंजी के रूप में कार्य करता है। पारंपरिक भाषाओं में, यह देर से बंधना असंभव है। केवीसी विशाल अभिकल्पना लचीलेपन की ओर ले जाता है। एक वस्तु के प्रकार को ज्ञात करने की आवश्यकता नहीं है, फिर भी केवीसी का उपयोग करके उस वस्तु की किसी भी संपत्ति की खोज की जा सकती है। इसके अलावा, इस प्रणाली को कुछ कोकोआ शब्द कुंजी-मूल्य अवलोकन (केवीओ) का उपयोग करके विस्तारित करके, [[पूर्ववत]] करने के लिए स्वत: समर्थन प्रदान किया जाता है।


लेट स्टैटिक बाइंडिंग स्टैटिक और डायनेमिक बाइंडिंग के बीच कहीं बाइंडिंग का एक प्रकार है। प्रोग्राम चलाने से पहले नामों की बाइंडिंग को स्टेटिक (प्रारंभिक) कहा जाता है; प्रोग्राम रन के रूप में निष्पादित बाइंडिंग गतिशील (देर से या वर्चुअल) हैं।
विलंब स्थैतिक अनुबंधन स्थैतिक एवं गतिक अनुबंधन के बीच कहीं अनुबंधन का एक प्रकार है। प्रोग्राम चलाने से पहले नामों की अनुबंधन को स्थैतिक (प्रारंभिक) कहा जाता है; प्रोग्राम रन के रूप में निष्पादित अनुबंधन गतिशील (देर से या कल्पित) हैं।


== समृद्ध वस्तुएं ==
== समृद्ध वस्तुएं ==
कोको की सबसे उपयोगी विशेषताओं में से एक शक्तिशाली आधार वस्तु है जो सिस्टम आपूर्ति करता है। उदाहरण के तौर पर, फाउंडेशन कक्षाओं पर विचार करें <code>NSString</code> और <code>NSAttributedString</code>, जो [[यूनिकोड]] स्ट्रिंग (कंप्यूटर विज्ञान) प्रदान करते हैं, और <code>[[NSText]]</code> AppKit में सिस्टम, जो प्रोग्रामर को GUI में स्ट्रिंग ऑब्जेक्ट रखने की अनुमति देता है।
कोकोआ की सबसे उपयोगी विशेषताओं में से एक शक्तिशाली आधार वस्तु है जो प्रणाली आपूर्ति करता है। उदाहरण के लिए, फाउंडेशन कक्षाओं पर विचार करें <code>एनएसस्ट्रिंग</code>और<code>एनएसएट्रीब्यूटेडस्ट्रिं,</code>जो [[यूनिकोड|यूनिकूट]] स्ट्रिंग (कंप्यूटर विज्ञान) प्रदान करते हैं, और<code>[[NSText|एनएसटेक्स्ट]]</code>ऐपकिट में प्रणाली, जो प्रोग्रामर को जीयूआई में स्ट्रिंग ऑब्जेक्ट रखने की अनुमति देता है।
 
[[NSText|<code>एनएसटेक्स्ट</code>]]और इसके संबंधित वर्गों का उपयोग स्ट्रिंग्स को प्रदर्शित करने और संपादित करने के लिए किया जाता है। सम्मिलित वस्तुओं का संग्रह एक आवेदन को एक साधारण एकल-पंक्ति पाठ प्रविष्टि क्षेत्र से पूर्ण बहु-पृष्ठ, बहु-स्तंभ पाठ लेआउट स्कीमा में पूर्ण प्रस्तुतेवर [[टाइपोग्राफी|मुद्रण]] सुविधाओं जैसे [[कर्निंग]], लिगचर (मुद्रण), चलने वाले पाठ के साथ कुछ भी लागू करने की अनुमति देता है। स्वेच्छाचारी [[आकार]] के आसपास, [[ROTATION|क्रमावर्तन]], पूर्ण यूनिकूट समर्थन, और स्थानिक एंटी-अलियास [[ग्लिफ़]] रेंडरिंग। अनुच्छेद अभिन्यास स्वचालित रूप से या उपयोगकर्ता द्वारा नियंत्रित किया जा सकता है, एक अंतर्निहित [[शासक]] वस्तु का उपयोग करके जिसे किसी भी पाठ दृश्य से जोड़ा जा सकता है। भाषा शब्दकोशों के प्रणाली-वाइड सम्मुच्चय का उपयोग करते हुए, वर्तनी जाँच स्वचालित है। असीमित पूर्ववत समर्थन अंतर्निहित है। केवल अंतर्निहित सुविधाओं का उपयोग करके, कूट की 10 पंक्तियों के रूप में एक पाठ संपादक एप्लिकेशन लिख सकता है। नए नियंत्रक वस्तु के साथ, यह शून्य की ओर गिर सकता है।
 
जब विस्तारण की आवश्यकता होती है, तो कोकोआ का ऑब्जेक्टिव-सी का उपयोग इसे एक सीधा काम बनाता है। ऑब्जेक्टिव-सी में [https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1 श्रेणी की अवधारणा सम्मिलित है], जो उपस्थिता क्लास को इन-प्लेस संशोधित करने की अनुमति देता है। ढांचे में मूल कक्षाओं में किसी भी बदलाव के बिना, या यहां तक ​​​​कि इसके स्रोत तक पहुंच के बिना किसी श्रेणी में कार्यक्षमता को पूरा किया जा सकता है। अन्य सामान्य भाषाओं में, इसी कार्य के लिए अतिरिक्त सुविधाओं का समर्थन करने के लिए एक नया उपवर्ग प्राप्त करने की आवश्यकता होती है, और फिर मूल वर्ग के सभी उदाहरणों को नए उपवर्ग के उदाहरणों से बदलना पड़ता है।


<code>NSText</code> और इसके संबंधित वर्गों का उपयोग स्ट्रिंग्स को प्रदर्शित करने और संपादित करने के लिए किया जाता है। शामिल वस्तुओं का संग्रह एक आवेदन को एक साधारण एकल-पंक्ति पाठ प्रविष्टि क्षेत्र से पूर्ण बहु-पृष्ठ, बहु-स्तंभ पाठ लेआउट स्कीमा में पूर्ण पेशेवर [[टाइपोग्राफी]] सुविधाओं जैसे [[कर्निंग]], लिगचर (टाइपोग्राफी), चलने वाले पाठ के साथ कुछ भी लागू करने की अनुमति देता है। मनमाने [[आकार]] के आसपास, [[ROTATION]], पूर्ण यूनिकोड समर्थन, और स्थानिक एंटी-अलियासिंग | एंटी-अलियास [[ग्लिफ़]] रेंडरिंग। अनुच्छेद लेआउट स्वचालित रूप से या उपयोगकर्ता द्वारा नियंत्रित किया जा सकता है, एक अंतर्निहित [[शासक]] वस्तु का उपयोग करके जिसे किसी भी पाठ दृश्य से जोड़ा जा सकता है। भाषा शब्दकोशों के सिस्टम-वाइड सेट का उपयोग करते हुए, वर्तनी जाँच स्वचालित है। असीमित पूर्ववत/फिर से करें समर्थन अंतर्निहित है। केवल अंतर्निहित सुविधाओं का उपयोग करके, कोड की 10 पंक्तियों के रूप में एक पाठ संपादक एप्लिकेशन लिख सकता है। नए कंट्रोलर ऑब्जेक्ट के साथ, यह शून्य की ओर गिर सकता है।
== कार्यान्वयन और अनुबंधन ==
जब एक्सटेंशन की आवश्यकता होती है, तो कोको का ऑब्जेक्टिव-सी का उपयोग इसे एक सीधा काम बनाता है। ऑब्जेक्टिव-सी में [https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1 की अवधारणा शामिल है कैटेगरी], जो मौजूदा क्लास को इन-प्लेस संशोधित करने की अनुमति देता है। ढांचे में मूल कक्षाओं में किसी भी बदलाव के बिना, या यहां तक ​​​​कि इसके स्रोत तक पहुंच के बिना किसी श्रेणी में कार्यक्षमता को पूरा किया जा सकता है। अन्य सामान्य भाषाओं में, इसी कार्य के लिए अतिरिक्त सुविधाओं का समर्थन करने के लिए एक नया उपवर्ग प्राप्त करने की आवश्यकता होती है, और फिर मूल वर्ग के सभी उदाहरणों को नए उपवर्ग के उदाहरणों से बदलना पड़ता है।
कोकोआ प्राधार ऑब्जेक्टिव-सी में लिखे गए हैं। कोकोआ प्राधार के लिए जावा [[भाषा बंधन]] (जिसे जावा ब्रिज कहा जाता है) को ऑब्जेक्टिव-सी को एक अधिक लोकप्रिय भाषा के साथ बदलने के उद्देश्य से भी उपलब्ध कराया गया था।<ref>{{cite journal|url=http://www.mactech.com/articles/mactech/Vol.19/19.12/CocoaAppsinJava/index.html|title=Writing Cocoa Apps in Java|author=Steve Klingsporn|journal=[[MacTech]]|volume=19|issue=12|year=2003}}</ref> लेकिन ये अनुबंधन कोकोआ विकासकों के बीच अलोकप्रिय थे और कोकोआ के संदेश पासिंग शब्दार्थ ने जावा जैसी स्थैतिकतः-टाइप की गई भाषा में अच्छी तरह से अनुवाद नहीं किया।<ref>{{cite web|url=https://developer.apple.com/legacy/library/documentation/Cocoa/Conceptual/Legacy/JavaBridge/JavaBridge.pdf|title=Using the Java Bridge|publisher=[[Apple Inc.]]|quote=Because Java is a strongly typed language, it requires more information about the classes and interfaces it manipulates at compile time. Therefore, before using Objective-C classes as Java ones, a description of them has to be written and compiled.}}</ref> कोकोआ की कार्यावधि अनुबंधन की आवश्यकता का अर्थ है कि कोकोआ की कई प्रमुख विशेषताएं जावा के साथ उपलब्ध नहीं हैं। 2005 में, एप्पल ने घोषणा की कि जावा ब्रिज को पदावनत किया जाना था, जिसका अर्थ है कि 10.4 के बाद के मैक ओएस संस्करणों में कोकोआ में जोड़े गए फीचर कोकोआ-जावा प्रोग्रामिंग इंटरफ़ेस में नहीं जोड़े जाएंगे।


== कार्यान्वयन और बाइंडिंग ==
[[Apple वर्ल्डवाइड डेवलपर्स कॉन्फ्रेंस|एप्पल वर्ल्डवाइड विकासकों कॉन्फ्रेंस]] (डब्ल्यूडब्ल्यूडीसी) 2014 में, एप्पल ने स्विफ्ट (प्रोग्रामिंग लैंग्वेज) नाम की एक नई प्रोग्रामिंग लैंग्वेज प्रस्तुत की, जिसका उद्देश्य ऑब्जेक्टिव-सी को बदलना है।<ref>{{cite web |url=http://appleinsider.com/articles/14/06/04/apples-top-secret-swift-language-grew-from-work-to-sustain-objective-c-which-it-now-aims-to-replace |title=Apple's top secret Swift language grew from work to sustain Objective-C, which it now aims to replace}}</ref>
कोको फ्रेमवर्क ऑब्जेक्टिव-सी में लिखे गए हैं। कोको फ्रेमवर्क के लिए जावा [[भाषा बंधन]] (जिसे जावा ब्रिज कहा जाता है) को ऑब्जेक्टिव-सी को एक अधिक लोकप्रिय भाषा के साथ बदलने के उद्देश्य से भी उपलब्ध कराया गया था।<ref>{{cite journal|url=http://www.mactech.com/articles/mactech/Vol.19/19.12/CocoaAppsinJava/index.html|title=Writing Cocoa Apps in Java|author=Steve Klingsporn|journal=[[MacTech]]|volume=19|issue=12|year=2003}}</ref> लेकिन ये बाइंडिंग कोको डेवलपर्स के बीच अलोकप्रिय थे और कोको के मैसेज पासिंग सिमेंटिक्स ने जावा जैसी स्टैटिकली-टाइप की गई भाषा में अच्छी तरह से अनुवाद नहीं किया।<ref>{{cite web|url=https://developer.apple.com/legacy/library/documentation/Cocoa/Conceptual/Legacy/JavaBridge/JavaBridge.pdf|title=Using the Java Bridge|publisher=[[Apple Inc.]]|quote=Because Java is a strongly typed language, it requires more information about the classes and interfaces it manipulates at compile time. Therefore, before using Objective-C classes as Java ones, a description of them has to be written and compiled.}}</ref> कोको की रनटाइम बाइंडिंग की आवश्यकता का मतलब है कि कोको की कई प्रमुख विशेषताएं जावा के साथ उपलब्ध नहीं हैं। 2005 में, Apple ने घोषणा की कि जावा ब्रिज को पदावनत किया जाना था, जिसका अर्थ है कि 10.4 के बाद के macOS संस्करणों में कोको में जोड़े गए फीचर कोको-जावा प्रोग्रामिंग इंटरफ़ेस में नहीं जोड़े जाएंगे।


[[Apple वर्ल्डवाइड डेवलपर्स कॉन्फ्रेंस]] (WWDC) 2014 में, Apple ने स्विफ्ट (प्रोग्रामिंग लैंग्वेज) नाम की एक नई प्रोग्रामिंग लैंग्वेज पेश की, जिसका उद्देश्य ऑब्जेक्टिव-सी को बदलना है।<ref>{{cite web |url=http://appleinsider.com/articles/14/06/04/apples-top-secret-swift-language-grew-from-work-to-sustain-objective-c-which-it-now-aims-to-replace |title=Apple's top secret Swift language grew from work to sustain Objective-C, which it now aims to replace}}</ref>




===ऐप्पलस्क्रिप्टओबीजेसी===
===ऐप्पलस्क्रिप्टओबीजेसी===
मूल रूप से, AppleScript Studio का उपयोग सरल कोको अनुप्रयोगों को विकसित करने के लिए किया जा सकता था।<ref>{{cite web|title=AppleScript Studio Programming Guide (Not Recommended): About AppleScript Studio|url=https://developer.apple.com/legacy/library/documentation/AppleScript/Conceptual/StudioBuildingApps/chapter02/studio_about_book.html#//apple_ref/doc/uid/20001249-TPXREF101|publisher=Apple, Inc.|access-date=November 20, 2013}}</ref> हालाँकि, हिम तेंदुए के रूप में, इसे पदावनत कर दिया गया है। इसे [[AppleScript]]ObjC से बदल दिया गया, जो कोको फ्रेमवर्क का उपयोग करते हुए AppleScript में प्रोग्रामिंग की अनुमति देता है।<ref>{{cite web |title=AppleScriptObjC Release Notes |url=https://developer.apple.com/library/mac/#releasenotes/ScriptingAutomation/RN-AppleScriptObjC/ |publisher=Apple, Inc. |access-date=November 20, 2013}}</ref>
मूल रूप से, एप्पलस्क्रिप्ट स्टूडियो का उपयोग सरल कोकोआ अनुप्रयोगों को विकसित करने के लिए किया जा सकता था।<ref>{{cite web|title=AppleScript Studio Programming Guide (Not Recommended): About AppleScript Studio|url=https://developer.apple.com/legacy/library/documentation/AppleScript/Conceptual/StudioBuildingApps/chapter02/studio_about_book.html#//apple_ref/doc/uid/20001249-TPXREF101|publisher=Apple, Inc.|access-date=November 20, 2013}}</ref> हालाँकि, हिम तेंदुए के रूप में, इसे पदावनत कर दिया गया है। इसे एप्पलस्क्रिप्टओबीजेसी से बदल दिया गया, जो कोकोआ प्राधार का उपयोग करते हुए एप्पलस्क्रिप्ट में प्रोग्रामिंग की अनुमति देता है।<ref>{{cite web |title=AppleScriptObjC Release Notes |url=https://developer.apple.com/library/mac/#releasenotes/ScriptingAutomation/RN-AppleScriptObjC/ |publisher=Apple, Inc. |access-date=November 20, 2013}}</ref>




=== अन्य बंधन ===
=== अन्य बंधन ===


कोको प्रोग्रामिंग वातावरण को [[PasCocoa]], पीओओबीजेसी, [[कैमलबोन्स]], [[RubyCocoa]], और [[डी (प्रोग्रामिंग भाषा)]] / ऑब्जेक्टिव-सी ब्रिज जैसे भाषा बंधन की सहायता से अन्य उपकरणों का उपयोग करके एक्सेस किया जा सकता है।
कोकोआ प्रोग्रामिंग वातावरण को [[PasCocoa|पीएएसकोकोआ]], पीओओबीजेसी, [[कैमलबोन्स]], [[RubyCocoa|रूबीकोकोआ]], और [[डी (प्रोग्रामिंग भाषा)]] / ऑब्जेक्टिव-सी ब्रिज जैसे भाषा बंधन की सहायता से अन्य उपकरणों का उपयोग करके अभिगमन किया जा सकता है।


<!--Try to organize bindings, alphabetically by language.-->अन्य भाषाओं के लिए उपलब्ध तृतीय-पक्ष बाइंडिंग में AppleScript, [[Clozure CL]], [[Monobjc]] और [[NObjective]] (C Sharp (प्रोग्रामिंग भाषा)|C#), Cocoa Sharp|Cocoa# (CLI), Cocodao and D (प्रोग्रामिंग भाषा)/Objective-C ब्रिज शामिल हैं।<ref>[http://sourceforge.net/projects/cocodao/ Cocodao], bridge to create Cocoa applications in D language.</ref><ref>[http://michelf.com/weblog/2007/d-objc-bridge/ D/Objective-C Bridge], a [[language binding]] mechanism for Cocoa.</ref> [[LispWorks]], [[Object Pascal]], CamelBones ([[Perl]]), PyObjC (Python (प्रोग्रामिंग भाषा)), [[FPC PasCocoa]] ([[Lazarus (IDE)]] और [[Free Pascal]]), RubyCocoa ([[रूबी (प्रोग्रामिंग भाषा)]])।<ref>[http://osx.hyperjeff.net/Reference/cocoa.php more extensive list of implementations]</ref>
<!--Try to organize bindings, alphabetically by language.-->अन्य भाषाओं के लिए उपलब्ध तृतीय-पक्ष अनुबंधन में एप्पलस्क्रिप्ट, [[Clozure CL|क्लोजर सीL]], [[Monobjc|मोनोबजक]] और [[NObjective|एनऑब्जेक्टिव]] (सी शार्प (प्रोग्रामिंग भाषा), कोकोआ शार्प (सीLI), कोकोआडाओ और डी (प्रोग्रामिंग भाषा)/ऑब्जेक्टिव-सी ब्रिज सम्मिलित हैं।<ref>[http://sourceforge.net/projects/cocodao/ Cocodao], bridge to create Cocoa applications in D language.</ref><ref>[http://michelf.com/weblog/2007/d-objc-bridge/ D/Objective-C Bridge], a [[language binding]] mechanism for Cocoa.</ref> [[LispWorks|लिस्पवर्क्स]], [[Object Pascal|ऑब्जेक्ट पास्कल]], कैमलबोन्स ([[Perl|पर्ल]]), पीओओबीजेसी (पायथन (प्रोग्रामिंग भाषा)),[[एफपी]][[FPC PasCocoa|सी पासकोकोआ]] ([[Lazarus (IDE)|लजारस (आईडीई)]] और [[Free Pascal|फ़्री पास्कल]]), रूबीकोकोआ ([[रूबी (प्रोग्रामिंग भाषा)]])।<ref>[http://osx.hyperjeff.net/Reference/cocoa.php more extensive list of implementations]</ref> [[MacRuby|मैकरूबी]] नाम की एक रूबी भाषा का कार्यान्वयन, जो एक पुल तंत्र की आवश्यकता को दूर करता है, पूर्व में एप्पल द्वारा विकसित किया गया था, जबकि एनयू (प्रोग्रामिंग भाषा) एक [[लिस्प (प्रोग्रामिंग भाषा)]] जैसी भाषा है जो ऑब्जेक्टिव-सी ऑब्जेक्ट प्रतिरूप का सीधे उपयोग करती है, और इस प्रकार बंधन की आवश्यकता के बिना कोकोआ ढांचे का उपयोग कर सकते हैं।
[[MacRuby]] नाम की एक रूबी भाषा का कार्यान्वयन, जो एक पुल तंत्र की आवश्यकता को दूर करता है, पूर्व में Apple द्वारा विकसित किया गया था, जबकि Nu (प्रोग्रामिंग भाषा) एक [[लिस्प (प्रोग्रामिंग भाषा)]] जैसी भाषा है जो ऑब्जेक्टिव-सी ऑब्जेक्ट मॉडल का सीधे उपयोग करती है, और इस प्रकार बंधन की आवश्यकता के बिना कोको ढांचे का उपयोग कर सकते हैं।


=== अन्य कार्यान्वयन ===
=== अन्य कार्यान्वयन ===
कोको ढांचे के प्रमुख हिस्सों के खुले स्रोत कार्यान्वयन भी हैं, जैसे [[जीएनयूस्टेप]] और कोकोट्रॉन,<ref>[http://www.cocotron.org/ Cocotron], free software implementation of Cocoa.</ref> जो [[Microsoft Windows]] और [[Linux]] जैसे अन्य ऑपरेटिंग सिस्टम को लक्षित करने के लिए [[क्रॉस-प्लेटफॉर्म]] कोको एप्लिकेशन डेवलपमेंट की अनुमति देता है।
कोकोआ ढांचे के प्रमुख हिस्सों के खुले स्रोत कार्यान्वयन भी हैं, जैसे [[जीएनयूस्टेप]] और कोकोआट्रॉन,<ref>[http://www.cocotron.org/ Cocotron], free software implementation of Cocoa.</ref> जो [[Microsoft Windows|माइक्रोसॉफ़्ट विंडोज़]] और लिनक्स जैसे अन्य संचालन प्रणाली को लक्षित करने के लिए [[क्रॉस-प्लेटफॉर्म]] कोकोआ एप्लिकेशन परिवर्धन की अनुमति देता है।


== यह भी देखें ==
== यह भी देखें ==
{{col-list|colwidth=25em|
{{col-list|colwidth=25em|
* [[Carbon (API)]]
* [[कार्बन (एपीआई)]]
* [[GNUStep]]
* [[जीएनयूस्टेप]]
* [[Objective-C]]
* [[उद्देश्य सी]]
* [[Xcode]]
* [[एक्सकोड]]
* [[iOS SDK]]
* [[आईओएस एसडीके]]
* [[Interface Builder]]
* [[इंटरफ़ेस बिल्डर]]
* [[Aqua (user interface)]]
* [[एक्वा (उपयोक्‍ता अंतरापृष्‍ठ)]]
* [[Rosetta (software)]]
* [[रोसेटा (सॉफ्टवेयर)]]
* [[XNU]]
* [[एक्सएनयू]]
* [[Quartz (graphics layer)]]
* [[क्वार्ट्ज (ग्राफिक्स परत)]]
* [[X11]]
* [[एक्स11]]
* [[QuickDraw]]
* [[जल्द आकर्षित]]
* [[SIMBL]]
* [[सिंबल]]
* [[Swift (programming language)]]
* [[स्विफ्ट (प्रोग्रामिंग भाषा)]]}}
}}




Line 125: Line 128:


==ग्रन्थसूची==
==ग्रन्थसूची==
*[[Aaron Hillegass]]: ''Cocoa Programming for Mac OS X'', Addison-Wesley, 3rd Edition 2008, Paperback, {{ISBN|0-321-50361-9}}.
*[[Aaron Hillegass]]: ''कोकोआ Programming for मैक ओएस एक्स'', Addison-Wesley, 3rd Edition 2008, Paperbaसीk, {{ISBN|0-321-50361-9}}.
*[[Stephen Kochan]]: ''Programming in Objective-C'', Sams, 1st Edition 2003, Paperback, {{ISBN|0-672-32586-1}}.
*[[Stephen Kochan|Stephen Koसीhan]]: ''Programming in Objeसीtive-सी'', Sams, 1st Edition 2003, Paperbaसीk, {{ISBN|0-672-32586-1}}.
*[[Michael Beam]], [[James Duncan Davidson]]: ''Cocoa in a Nutshell'', O'Reilly, 1st Edition 2003, Paperback, {{ISBN|0-596-00462-1}}.
*[[Michael Beam|Miसीhael Beam]], [[James Duncan Davidson|James Dunसीan Davidson]]: ''कोकोआ in a Nutshell'', O'Reilly, 1st Edition 2003, Paperbaसीk, {{ISBN|0-596-00462-1}}.
*[[Erick Tejkowski]]: ''Cocoa Programming for Dummies'', 1st Edition 2003, Paperback, {{ISBN|0-7645-2613-8}}.
*[[Erick Tejkowski|Eriसीk Tejkowski]]: ''कोकोआ Programming for Dummies'', 1st Edition 2003, Paperbaसीk, {{ISBN|0-7645-2613-8}}.
*{{cite book |title=  Building Cocoa Applications: A Step by Step Guide  |publisher=[[O'Reilly Media]] |edition=1st |date=2002  |first1=Simson  |last1=Garfinkel |author-link1=Simson Garfinkel |first2=Michael K.  |last2=Mahoney  |isbn=0-596-00235-1 |citeseerx=10.1.1.394.3248 }}
*{{cite book |title=  Building Cocoa Applications: A Step by Step Guide  |publisher=[[O'Reilly Media]] |edition=1st |date=2002  |first1=Simson  |last1=Garfinkel |author-link1=Simson Garfinkel |first2=Michael K.  |last2=Mahoney  |isbn=0-596-00235-1 |citeseerx=10.1.1.394.3248 }}
*[[Paris Buttfield-Addison]], [[Jon Manning]]: ''Learning Cocoa with Objective-C'', O'Reilly, 3rd Edition 2012, Paperback, {{ISBN|978-1-4493-1849-9}}.
*[[Paris Buttfield-Addison]], [[Jon Manning]]: ''Learning कोकोआ with Objeसीtive-सी'', O'Reilly, 3rd Edition 2012, Paperbaसीk, {{ISBN|978-1-4493-1849-9}}.
*[[Scott Anguish]], [[Erik M. Buck]], [[Donald A. Yacktman]]: ''Cocoa Programming'', Sams, 1st Edition 2002, Paperback, {{ISBN|0-672-32230-7}}.
*[[Scott Anguish|Sसीott Anजीयूआईsh]], [[Erik M. Buck|Erik M. Buसीk]], [[Donald A. Yacktman|Donald A. Yaसीktman]]: ''कोकोआ Programming'', Sams, 1st Edition 2002, Paperbaसीk, {{ISBN|0-672-32230-7}}.
*[[Erik M. Buck]], [[Donald A. Yacktman]]: ''Cocoa Design Patterns'', Addison-Wesley Professional, 1st Edition 2009, Paperback, {{ISBN|978-0321535023}}
*[[Erik M. Buck|Erik M. Buसीk]], [[Donald A. Yacktman|Donald A. Yaसीktman]]: ''कोकोआ Design Patterएनएस'', Addison-Wesley Professional, 1st Edition 2009, Paperbaसीk, {{ISBN|978-0321535023}}
*[[Bill Cheeseman]]: ''Cocoa Recipes for Mac OS X'', Peachpit Press, 1st Edition 2002, Paperback, {{ISBN|0-201-87801-1}}.
*[[Bill Cheeseman|Bill सीheeseman]]: ''कोकोआ Reसीipes for मैक ओएस एक्स'', Peaसीhpit Press, 1st Edition 2002, Paperbaसीk, {{ISBN|0-201-87801-1}}.
*Andrew Duncan: ''Objective-C Pocket Reference, O'Reilly'', 1st Edition 2002, Paperback, {{ISBN|0-596-00423-0}}.
*Andrew Dunसीan: ''Objeसीtive-सी Poसीket Referenसीe, O'Reilly'', 1st Edition 2002, Paperbaसीk, {{ISBN|0-596-00423-0}}.




==बाहरी संबंध==
==बाहरी संबंध==
* {{Official website|developer.apple.com/technologies/mac/cocoa.html}}  {{dead link|date=January 2020}}
* {{Official website|developer.apple.com/technologies/mac/cocoa.html}}  {{dead link|date=January 2020}}
* [https://developer.apple.com/library/mac/navigation/#section=Frameworks&topic=Cocoa%20Layer Mac Developer Library, Cocoa Layer], Apple's documentation
* [https://developer.apple.com/library/mac/navigation/#section=Frameworks&topic=Cocoa%20Layer Maसी Developer Library, कोकोआ Layer], एप्पल's doसीumentation
* [https://web.archive.org/web/20190202170514/http://www.idevapps.com/ iDevApps], Mac programming forum
* [https://web.archive.org/web/20190202170514/http://www.idevapps.com/ iDevApps], Maसी programming forum
* [http://www.cocoadevcentral.com/ Cocoa Dev Central]
* [http://www.cocoadevcentral.com/ कोकोआ Dev सीentral]
* [https://web.archive.org/web/20080801025517/http://www.cocoadev.com/ Cocoa Dev]
* [https://web.archive.org/web/20080801025517/http://www.cocoadev.com/ कोकोआ Dev]
* [https://stackoverflow.com/questions/tagged/cocoa Stack Overflow: Cocoa] <!-- Stack Overflow is a popular and well regarded when it comes to Cocoa and Cocoa Touch -->
* [https://stackoverflow.com/questions/tagged/cocoa Staसीk Overflow: कोकोआ]<!-- Stack Overflow is a popular and well regarded when it comes to Cocoa and Cocoa Touch -->
 
{{macOS}}
{{Widget toolkits}}
[[Category: मैकओएस एपीआई]]
 
 


[[Category: Machine Translated Page]]
[[Category:All articles with dead external links]]
[[Category:All articles with unsourced statements]]
[[Category:Articles with dead external links from January 2020]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Articles with unsourced statements from June 2016]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Multi-column templates]]
[[Category:Official website not in Wikidata]]
[[Category:Pages using div col with small parameter]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Templates using under-protected Lua modules]]
[[Category:Use mdy dates from October 2013]]
[[Category:Wikipedia fully protected templates|Div col]]
[[Category:मैकओएस एपीआई]]

Latest revision as of 11:04, 17 March 2023

Cocoa
Developer(s)Apple Inc.
Written inC, C++, Objective-C, Swift
Operating systemmacOS
TypeSoftware framework
LicenseProprietary
with some open source components[citation needed]
WebsiteApple Developer

कोकोआ एप्पल की प्राकृत वस्तु अभिमुखित अप्लिकेशन प्रोग्रामिंग अंतरफलक (एपीआई) है, जो इसके डेस्कटॉप कंप्यूटर संचालन प्रणाली मैक ओएस के लिए है।

कोकोआ में फाउंडेशन किट, एप्लिकेशन किट और केंद्र भाग डेटा प्राधार सम्मिलित हैं, जैसा कि इसमेंकोकोआ.एचप्रवेशिका संचिका सम्मिलित है, और उनके द्वारा सम्मिलित पुस्तकालय और प्राधार, जैसे सी मानक पुस्तकालय और ऑब्जेक्टिव-सी कार्यावधि सम्मिलित है।[1]

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

अंतिम प्रयोक्ता के लिए, कोकोआ अनुप्रयोग प्रक्रिया सामग्री वे हैं जो कोकोआ प्रोग्रामिंग वातावरण का उपयोग करके लिखे गए हैं। इस तरह के अनुप्रयोगों में सामान्यतः एक परिचित रूप और अनुभव होता है, क्योंकि कोकोआ प्रोग्रामिंग वातावरण बहुत सारे सामान्य उपयोगकर्ता अंतरापृष्ठ (जैसे बटन, स्क्रॉल बार, आदि) प्रदान करता है, और एप्पल के मानव इंटरफ़ेस दिशानिर्देशों का पालन करने के लिए एक एप्लिकेशन के कई पहलुओं को स्वचालित करता है।

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

इतिहास

कोकोआ 1980 और 1990 के दशक में नेक्स्ट द्वारा विकसित नेक्स्टस्टेप और ओपनस्टेप प्रोग्रामिंग वातावरण से कई सॉफ्टवेयर ढांचा (मुख्य रूप से ऐप किट और आधार किट) के वंश को जारी रखता है। एप्पल ने दिसंबर 1996 में नेक्स्ट का अधिग्रहण किया, और बाद में रैप्सोडी (संचालन प्रणाली) संचालन प्रणाली पर काम करना प्रारम्भ कर दिया, जो ओपनस्टेप का प्रत्यक्ष उत्तराधिकारी था। ब्लू बॉक्स नामक उत्कृष्ट मैक ओएस अनुप्रयोगों के लिए इसका अनुकरण आधार होना था। पुस्तकालयों और बाइनरी समर्थन के ओपनस्टेप आधार को येलो बॉक्स कहा गया। रैप्सोडी मैक ओएस एक्स में विकसित हुआ, और येलो बॉक्स कोकोआ बन गया। इस प्रकार, कोकोआ कक्षाएं एनएस अक्षरों से प्रारम्भ होती हैं, जैसे एनएसस्ट्रिंग या एनएसऐरे। ये ओपनस्टेप प्राधार, नेक्स्टस्टेप के लिए मूल स्वामित्व शब्द के लिए हैं।[2]

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

परिणामी सॉफ्टवेयर ढांचे को शीघ्रता के लिए कोकोआ नाम मिला, क्योंकि नाम पहले से ही एप्पल द्वारा ट्रेडमार्क (व्यापार चिह्न) किया गया था। नाम के इस वर्तमान उपयोग से पहले कई वर्षों तक, एप्पल के कोकोआ ट्रेडमार्क की उत्पत्ति बच्चों के लिए एक बहुमाध्यमिक परियोजना अभिकल्पना एप्लिकेशन के नाम के रूप में हुई थी। एप्लिकेशन को मूल रूप से एप्पल अग्रिम प्रौद्योगिकियों ग्रुप में किडसिम नाम से विकसित किया गया था और फिर इसका नाम बदल दिया गया और कोकोआ के रूप में ट्रेडमार्क किया गया। पीटर जेन्सेन द्वारा गढ़ा गया नाम, जिसे एप्पल के लिए कोकोआ विकसित करने के लिए काम पर रखा गया था, का उद्देश्य बच्चों के लिए जावा को विकसित करना था, क्योंकि यह वेब पेजों में अंत: स्थापित था।[3] इस सॉफ़्टवेयर ढांचे के लिए एक नया ट्रेडमार्क पंजीकृत करते समय होने वाली देरी से बचने के लिए ट्रेडमार्क, और कोकोआ नाम का इस प्रकार पुन: उपयोग किया गया था। स्टीव जॉब्स की एप्पल में वापसी के बाद हुए एक युक्तिकरण (अर्थशास्त्र) में से एक में मूल कोकोआ कार्यक्रम को एप्पल में बंद कर दिया गया था। इसके बाद इसे तीसरे पक्ष को अनुज्ञप्ति दी गई और 2014 तक स्टेजकास्ट निर्माता के रूप में विपणन किया गया।

स्मृति प्रबंधन

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

अलोक या कॉपीके साथ बनाई गई नई आवंटित वस्तु एक की गिनती प्रतिधारित है। उस ऑब्जेक्ट को एक रिटेन मैसेज भेजने से रिटेन काउंट बढ़ जाता है, जबकि इसे रिलीज़ मैसेज भेजने से रिटेन काउंट घट जाता है। जब किसी ऑब्जेक्ट की रिटेन काउंट शून्य तक पहुँच जाता है, तो इसे सी++ डिस्ट्रक्टर के समान प्रक्रिया द्वारा हटा दिया जाता है।डीअलोकबुलाए जाने की प्रत्याभुति नहीं है।

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

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

मुख्य चौखटे

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

  • फाउंडेशन किट (फाउंडेशन), पहली बार नेक्स्टस्टेप 3 पर एंटरप्राइज़ ऑब्जेक्ट प्राधार में दिखाई दिया।[4] इसे ओपनस्टेप कार्य के हिस्से के रूप में विकसित किया गया था, और बाद में ओपनस्टेप के ऐपकिट के लिए आधार बन गया जब वह प्रणाली 1994 में जारी किया गया था। मैक ओएस पर, आधार कोर फाउंडेशन पर आधारित है। फाउंडेशन एक सामान्य वस्तु-उन्मुख पुस्तकालय है जो स्ट्रिंग (कंप्यूटर विज्ञान) और मूल्य प्रहस्तन, कंटेनर (डेटा संरचना) और पुनरावृत्ति, वितरित कंप्यूटिंग, घटना पाश (रन लूप) और अन्य फ़ंक्शन प्रदान करता है जो सीधे आलेखी प्रयोक्ता अंतराफलक से बंधे नहीं हैं। एनएस उपसर्ग, सभी वर्गों और ढांचे में स्थिर (प्रोग्रामिंग) के लिए उपयोग किया जाता है, कोकोआ की ओपेनस्टेप विरासत से आता है, जिसे नेक्स्ट और सन माइक्रोप्रणाली्स द्वारा संयुक्त रूप से विकसित किया गया था।
  • एप्लिकेशन किट (ऐपकिट) सीधे मूल नेक्स्टस्टेप एप्लिकेशन किट से ली गई है। इसमें कूट प्रोग्राम सम्मिलित हैं जिनका उपयोग आलेखी प्रयोक्ता अंतराफलक बनाने और परस्पर प्रभाव करने के लिए किया जा सकता है। ऐपकिट फाउंडेशन के शीर्ष पर बनाया गया है, और उसी एनएस उपसर्ग का उपयोग करता है।
  • कोर डेटा फाउंडेशन और कोकोआ के साथ सम्मिलित वस्तु दृढ़ता ढांचा है और कोकोआ.एच में पाया जाता है।[1]

कोकोआ वास्तुकला का एक महत्वपूर्ण हिस्सा इसका व्यापक दृश्य प्रतिरूप है। यह एक एप्लिकेशन प्राधार के लिए पारंपरिक प्रणालियों के साथ आयोजित किया गया है, लेकिन यह क्वार्ट्ज (आलेखिकी परत) द्वारा प्रदान किए गए पोर्टेबल डॉक्यूमेंट फॉर्मेट (पीडीएफ) ड्राइंग प्रतिरूप पर आधारित है। यह परिशिष्ट भाग-जैसी ड्राइंग कमांड का उपयोग करके कस्टम ड्राइंग सामग्री बनाने की अनुमति देता है, जो स्वचालित प्रिंटर समर्थन आदि की भी अनुमति देता है। चूंकि कोकोआ प्राधार सभी क्लिपिंग, स्क्रॉलिंग, स्केलिंग और ड्राइंग आलेखिकी के अन्य कामों का प्रबंधन करता है, इसलिए प्रोग्रामर बुनियादी ढांचे को लागू करने से स्वतंत्र हो जाता है और किसी एप्लिकेशन की सामग्री के अनूठे पहलुओं पर ध्यान केंद्रित कर सकता है।

प्रतिरूप-दृश्य-नियंत्रक

ज़ेरॉक्स पार्क में स्मॉलटाक टीमें अंततः एक अभिकल्पना धारणा पर व्यवस्थित हो गईं जिससे आसान विकास और उच्च कूट पुन: उपयोग हुआ। नामांकित प्रतिरूप-व्यू-नियंत्रक (एमवीसी), अवधारणा एक एप्लिकेशन को इंटरेक्टिंग ऑब्जेक्ट क्लास के तीन सम्मुच्चयों में विभाजित करती है:

  • प्रतिरूप वर्ग समस्या कार्यक्षेत्र डेटा और संचालन का प्रतिनिधित्व करते हैं (जैसे कि लोगों/विभागों/बजटों की सूची; अनुभागों/अनुच्छेदों/शैलीकृत पाठ के फुटनोट वाले दस्तावेज़)।
  • देखें कक्षाएं मानव-कंप्यूटर परस्पर क्रिया के लिए दृश्य प्रतिनिधित्व और शक्यता को लागू करती हैं (जैसे कैप्शन वाले आइकन के स्क्रॉल करने योग्य ग्रिड और संभावित संचालन के पॉप-अप मेनू)।
  • नियंत्रक क्लासेस में तर्क होता है जो प्रतिरूप डेटा को व्यू रिप्रेजेंटेशन के रूप में बहिस्तल करता है, प्रतिरूप ऑपरेशंस के लिए अफोर्डेंस-आरंभ किए गए यूजर एक्शन को प्रतिचित्र करता है, और दोनों को समकालिक करने के लिए स्टेट को बनाए रखता है।

कोकोआ का अभिकल्पना एमवीसी सिद्धांतों का एक निष्पक्ष, लेकिन बिल्कुल कठोर अनुप्रयोग नहीं है। ओपनस्टेप के अनुसार, प्रदान की गई अधिकांश कक्षाएं या तो उच्च-स्तरीय व्यू क्लासेस (ऐपकिट में) थीं या एनएसस्ट्रिंग जैसे अपेक्षाकृत निम्न-स्तरीय प्रतिरूप वर्गों में से एक थीं। समान एमवीसी प्रणाली की तुलना में, ओपनस्टेप में एक सुदृढ़ प्रतिरूप परत का अभाव था। उदाहरण के लिए, कोई स्टॉक क्लास दस्तावेज़ का प्रतिनिधित्व नहीं करता है। कोकोआ में संक्रमण के दौरान, डेस्कटॉप अनुप्रयोगों के लिए सामान्य कार्यक्षमता प्रदान करने के लिए कई पूर्व-बेल्लित वर्गों को प्रस्तुत करते हुए, प्रतिरूप परत का विस्तार किया गया था।

मैक ओएस एक्स 10.3 में, ऐप्पल ने वर्गों के एनएससीनियंत्रक परिवार को प्रारम्भ किया, जो नियंत्रक परत के लिए पूर्वनिर्धारित व्यवहार प्रदान करते हैं। इन वर्गों को कोकोआ अनुबंधन प्रणाली का हिस्सा माना जाता है, जो महत्वपूर्ण मूल्य अवलोकन और महत्वपूर्ण मूल्य अनुबंधन जैसी विज्ञप्ति का व्यापक उपयोग करता है। शब्द 'बाध्यकारी' दो वस्तुओं प्रायः एक दृश्य और एक नियंत्रक के बीच संबंध को संदर्भित करता है। अनुबंधन, विकासक को ठीक-ठाक व्यवहार करने के स्थान पर घोषणात्मक संबंधों पर अधिक ध्यान केंद्रित करने की अनुमति देती है।

मैक ओएस एक्स 10.4 के आगमन के साथ, एप्पल ने कोर डेटा प्राधार को प्रारम्भ करके इस नींव को और आगे बढ़ाया, जो प्रतिरूप परत में परिवर्तन अनुवर्तन और दृढ़ता को मानकीकृत करता है। असल में, ढांचा एप्लिकेशन डेटा में परिवर्तन करने की प्रक्रिया को बहुत सरल करता है, जब आवश्यक हो तो परिवर्तनों को पूर्ववत करता है, डेटा को डिस्क में सहेजता है, और इसे वापस पढ़ता है।

सभी तीन एमवीसी कार्यक्षेत्र के लिए प्राधार समर्थन प्रदान करने में, एप्पल का लक्ष्य बॉयलरप्लेट या ग्लू कूट की मात्रा को कम करना है, जिसे विकासकों को एप्लिकेशन-विशिष्ट सुविधाओं पर समय बिताने के लिए संसाधनों को मुक्त करके लिखना है।

लेट अनुबंधन

अधिकांश वस्तु अभिमुखित भाषाओं में, मेमोरी में कूट के पॉइंटर द्वारा विधियों को कॉल को भौतिक रूप से दर्शाया जाता है। यह किसी एप्लिकेशन के अभिकल्पना को प्रतिबंधित करता है क्योंकि विशिष्ट कमांड हैंडलिंग क्लासेस की आवश्यकता होती है, सामान्यतः चेन-ऑफ-रिस्पॉन्सिबिलिटी पैटर्न के अनुसार व्यवस्थित किया जाता है। जबकि कोकोआ अधिकांश भाग के लिए इस दृष्टिकोण को प्रतिधारित रखता है, ऑब्जेक्टिव-सी की देर से बाइंडिंग अधिक लचीलापन खोलती है।

उद्देश्य-सी के अनुसार, विधियों को एक चयनकर्ता द्वारा दर्शाया जाता है, एक स्ट्रिंग जो कॉल करने की विधि का वर्णन करती है। जब कोई संदेश भेजा जाता है, तो चयनकर्ता को ऑब्जेक्टिव-सी कार्यावधि में भेजा जाता है, उपलब्ध विधियों की सूची से मिलान किया जाता है, और विधि के कार्यान्वयन को कहा जाता है। चूंकि चयनकर्ता पाठ डेटा है, यह इसे एक संचिका में सहेजा जा सकता है, एक संजाल पर या प्रक्रियाओं के बीच प्रसारित किया जा सकता है, या अन्य तरीकों से प्रहस्तन किया जा सकता है। विधि के कार्यान्वयन को कार्यावधि पर देखा जाता है, संकलन समय पर नहीं। इसके लिए एक छोटा प्रदर्शन दंड है,[5] लेकिन देर से बाध्यकारी एक ही चयनकर्ता को विभिन्न कार्यान्वयनों को संदर्भित करने की अनुमति देता है।

इसी तरह के टोकन से, कोकोआ कुंजी-मूल्य कूटिंग (केवीसी) नामक एक व्यापक डेटा प्रहस्तन विधि प्रदान करता है।[6] यह डेटा के एक टुकड़े या किसी वस्तु की संपत्ति को कार्यावधि पर नाम से देखने या बदलने की अनुमति देता है। संपत्ति का नाम मूल्य की कुंजी के रूप में कार्य करता है। पारंपरिक भाषाओं में, यह देर से बंधना असंभव है। केवीसी विशाल अभिकल्पना लचीलेपन की ओर ले जाता है। एक वस्तु के प्रकार को ज्ञात करने की आवश्यकता नहीं है, फिर भी केवीसी का उपयोग करके उस वस्तु की किसी भी संपत्ति की खोज की जा सकती है। इसके अलावा, इस प्रणाली को कुछ कोकोआ शब्द कुंजी-मूल्य अवलोकन (केवीओ) का उपयोग करके विस्तारित करके, पूर्ववत करने के लिए स्वत: समर्थन प्रदान किया जाता है।

विलंब स्थैतिक अनुबंधन स्थैतिक एवं गतिक अनुबंधन के बीच कहीं अनुबंधन का एक प्रकार है। प्रोग्राम चलाने से पहले नामों की अनुबंधन को स्थैतिक (प्रारंभिक) कहा जाता है; प्रोग्राम रन के रूप में निष्पादित अनुबंधन गतिशील (देर से या कल्पित) हैं।

समृद्ध वस्तुएं

कोकोआ की सबसे उपयोगी विशेषताओं में से एक शक्तिशाली आधार वस्तु है जो प्रणाली आपूर्ति करता है। उदाहरण के लिए, फाउंडेशन कक्षाओं पर विचार करें एनएसस्ट्रिंगऔरएनएसएट्रीब्यूटेडस्ट्रिं,जो यूनिकूट स्ट्रिंग (कंप्यूटर विज्ञान) प्रदान करते हैं, औरएनएसटेक्स्टऐपकिट में प्रणाली, जो प्रोग्रामर को जीयूआई में स्ट्रिंग ऑब्जेक्ट रखने की अनुमति देता है।

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

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

कार्यान्वयन और अनुबंधन

कोकोआ प्राधार ऑब्जेक्टिव-सी में लिखे गए हैं। कोकोआ प्राधार के लिए जावा भाषा बंधन (जिसे जावा ब्रिज कहा जाता है) को ऑब्जेक्टिव-सी को एक अधिक लोकप्रिय भाषा के साथ बदलने के उद्देश्य से भी उपलब्ध कराया गया था।[7] लेकिन ये अनुबंधन कोकोआ विकासकों के बीच अलोकप्रिय थे और कोकोआ के संदेश पासिंग शब्दार्थ ने जावा जैसी स्थैतिकतः-टाइप की गई भाषा में अच्छी तरह से अनुवाद नहीं किया।[8] कोकोआ की कार्यावधि अनुबंधन की आवश्यकता का अर्थ है कि कोकोआ की कई प्रमुख विशेषताएं जावा के साथ उपलब्ध नहीं हैं। 2005 में, एप्पल ने घोषणा की कि जावा ब्रिज को पदावनत किया जाना था, जिसका अर्थ है कि 10.4 के बाद के मैक ओएस संस्करणों में कोकोआ में जोड़े गए फीचर कोकोआ-जावा प्रोग्रामिंग इंटरफ़ेस में नहीं जोड़े जाएंगे।

एप्पल वर्ल्डवाइड विकासकों कॉन्फ्रेंस (डब्ल्यूडब्ल्यूडीसी) 2014 में, एप्पल ने स्विफ्ट (प्रोग्रामिंग लैंग्वेज) नाम की एक नई प्रोग्रामिंग लैंग्वेज प्रस्तुत की, जिसका उद्देश्य ऑब्जेक्टिव-सी को बदलना है।[9]


ऐप्पलस्क्रिप्टओबीजेसी

मूल रूप से, एप्पलस्क्रिप्ट स्टूडियो का उपयोग सरल कोकोआ अनुप्रयोगों को विकसित करने के लिए किया जा सकता था।[10] हालाँकि, हिम तेंदुए के रूप में, इसे पदावनत कर दिया गया है। इसे एप्पलस्क्रिप्टओबीजेसी से बदल दिया गया, जो कोकोआ प्राधार का उपयोग करते हुए एप्पलस्क्रिप्ट में प्रोग्रामिंग की अनुमति देता है।[11]


अन्य बंधन

कोकोआ प्रोग्रामिंग वातावरण को पीएएसकोकोआ, पीओओबीजेसी, कैमलबोन्स, रूबीकोकोआ, और डी (प्रोग्रामिंग भाषा) / ऑब्जेक्टिव-सी ब्रिज जैसे भाषा बंधन की सहायता से अन्य उपकरणों का उपयोग करके अभिगमन किया जा सकता है।

अन्य भाषाओं के लिए उपलब्ध तृतीय-पक्ष अनुबंधन में एप्पलस्क्रिप्ट, क्लोजर सीL, मोनोबजक और एनऑब्जेक्टिव (सी शार्प (प्रोग्रामिंग भाषा), कोकोआ शार्प (सीLI), कोकोआडाओ और डी (प्रोग्रामिंग भाषा)/ऑब्जेक्टिव-सी ब्रिज सम्मिलित हैं।[12][13] लिस्पवर्क्स, ऑब्जेक्ट पास्कल, कैमलबोन्स (पर्ल), पीओओबीजेसी (पायथन (प्रोग्रामिंग भाषा)),एफपीसी पासकोकोआ (लजारस (आईडीई) और फ़्री पास्कल), रूबीकोकोआ (रूबी (प्रोग्रामिंग भाषा))।[14] मैकरूबी नाम की एक रूबी भाषा का कार्यान्वयन, जो एक पुल तंत्र की आवश्यकता को दूर करता है, पूर्व में एप्पल द्वारा विकसित किया गया था, जबकि एनयू (प्रोग्रामिंग भाषा) एक लिस्प (प्रोग्रामिंग भाषा) जैसी भाषा है जो ऑब्जेक्टिव-सी ऑब्जेक्ट प्रतिरूप का सीधे उपयोग करती है, और इस प्रकार बंधन की आवश्यकता के बिना कोकोआ ढांचे का उपयोग कर सकते हैं।

अन्य कार्यान्वयन

कोकोआ ढांचे के प्रमुख हिस्सों के खुले स्रोत कार्यान्वयन भी हैं, जैसे जीएनयूस्टेप और कोकोआट्रॉन,[15] जो माइक्रोसॉफ़्ट विंडोज़ और लिनक्स जैसे अन्य संचालन प्रणाली को लक्षित करने के लिए क्रॉस-प्लेटफॉर्म कोकोआ एप्लिकेशन परिवर्धन की अनुमति देता है।

यह भी देखें


संदर्भ

  1. 1.0 1.1 Mac Technology Overview: OS X Frameworks. Developer.apple.com. Retrieved on September 18, 2013.
  2. Amit Singh (June 19, 2006). Mac OS X Internals: A Systems Approach. ISBN 0-321-27854-2. Cocoa is an important inheritance from NeXT, as indicated by .. the "NS" prefix
  3. Mardesich, Jodi (April 14, 1997). "A Sour Note in Apple's Rhapsody Once-Loyal Software Writers Wary of New OS as Crucial Conference Looms". No. Morning Final. San Jose Mercury News. Retrieved August 13, 2015.
  4. HybridWorld. Cilinder.be. Retrieved on September 18, 2013.
  5. Wikibooks - Some Objective-C advantages
  6. "Key-Value Coding Programming Guide". Retrieved September 27, 2021.
  7. Steve Klingsporn (2003). "Writing Cocoa Apps in Java". MacTech. 19 (12).
  8. "Using the Java Bridge" (PDF). Apple Inc. Because Java is a strongly typed language, it requires more information about the classes and interfaces it manipulates at compile time. Therefore, before using Objective-C classes as Java ones, a description of them has to be written and compiled.
  9. "Apple's top secret Swift language grew from work to sustain Objective-C, which it now aims to replace".
  10. "AppleScript Studio Programming Guide (Not Recommended): About AppleScript Studio". Apple, Inc. Retrieved November 20, 2013.
  11. "AppleScriptObjC Release Notes". Apple, Inc. Retrieved November 20, 2013.
  12. Cocodao, bridge to create Cocoa applications in D language.
  13. D/Objective-C Bridge, a language binding mechanism for Cocoa.
  14. more extensive list of implementations
  15. Cocotron, free software implementation of Cocoa.


ग्रन्थसूची


बाहरी संबंध