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

From Vigyanwiki
(Created page with "{{Short description|MacOS framework}} {{Use mdy dates|date=October 2013}} {{Infobox software | name = Cocoa | logo = | developer...")
 
(TEXT)
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]] के लिए है।
कोको एप्पल की प्राकृत वस्तु अभिमुखित [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (API) है, जो इसके [[डेस्कटॉप कंप्यूटर]] [[ऑपरेटिंग सिस्टम|संचालन प्रणाली]] [[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> प्रवेशिका संचिका, और उनके द्वारा सम्मिलित पुस्तकालय और प्राधार, जैसे C मानक पुस्तकालय और ऑब्जेक्टिव-C कार्यावधि।<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 के [[मानव इंटरफ़ेस दिशानिर्देश]]ों का पालन करने के लिए एक एप्लिकेशन के कई पहलुओं को स्वचालित करता है।
कोको अनुप्रयोगों को सामान्यतः [[प्रोग्रामिंग भाषा]]ओं [[उद्देश्य सी|ऑब्जेक्टिव C]] या [[स्विफ्ट (प्रोग्रामिंग भाषा)]] का उपयोग करके एप्पल द्वारा प्रदान किए गए विकास टूल, विशेष रूप से [[Xcode|एक्स कोड]] (पूर्व में [[प्रोजेक्ट बिल्डर]]) [[प्रयोक्ता इंटरफ़ेस]] बिल्डर (अब [[Xcode|एक्स कोड]] का हिस्सा) का उपयोग करके विकसित किया जाता है। हालाँकि, कोको प्रोग्रामिंग वातावरण को अन्य उपकरणों का उपयोग करके अभिगमन किया जा सकता है। एक साधारण [[पाठ संपादक]] में ऑब्जेक्टिव-C कोको प्रोग्राम लिखना भी संभव है और कमांड लाइन या [[बनाओ (सॉफ्टवेयर)|मेकफाइल (सॉफ्टवेयर)]] से [[जीएनयू संकलक संग्रह|GNU संकलक संग्रह]] (GCC) या [[बजना|क्लैंग]] के साथ इसे स्वतः रूप से बनाना संभव है।


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


== इतिहास ==
== इतिहास ==
{{further|History of macOS}}
{{further|History of macOS}}
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>
'''कोको 1980 और 1990 के दशक में''' [[NeXT]] द्वारा विकसित [[NeXTSTEP]] और OpenStep प्रोग्रामिंग वातावरण से कई [[सॉफ्टवेयर ढांचा]] (मुख्य रूप से ऐप किट और फाउंडेशन किट) के वंश को जारी रखता है। एप्पल ने दिसंबर 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 क्लासेस और [[बर्कले सॉकेट]]्स के माध्यम से प्रबंधित नेटवर्क कनेक्शन के लिए केवल अल्पविकसित समर्थन था।
OpenStep को विकसित करने में किए गए अधिकांश कार्य Mac OS X को विकसित करने के लिए लागू किए गए थे, कोको सबसे अधिक दिखाई देने वाला भाग था। हालाँकि, मतभेद उपस्थित हैं। उदाहरण के लिए, नेक्स्टस्टेप और ओपनस्टेप ने टेक्स्ट और ग्राफिक्स के ऑन-स्क्रीन डिस्प्ले के लिए [[पोस्टस्क्रिप्ट प्रदर्शित करें]] का इस्तेमाल किया, जबकि कोको एप्पल के [[क्वार्ट्ज (ग्राफिक्स परत)]] पर निर्भर करता है (जो [[संवहन दस्तावेज़ स्वरूप]] (पीडीएफ) इमेजिंग मॉडल का उपयोग करता है, लेकिन इसकी अंतर्निहित तकनीक का नहीं)। कोको में इंटरनेट समर्थन का एक स्तर भी है, जिसमें NSURL और [[WebKit]] [[HTML]] कक्षाएं और अन्य सम्मिलित हैं, जबकि OpenStep के पास NSFileHandle क्लासेस और [[बर्कले सॉकेट]]्स के माध्यम से प्रबंधित नेटवर्क कनेक्शन के लिए केवल अल्पविकसित समर्थन था।


परिणामी सॉफ्टवेयर ढांचे को शीघ्रता के लिए कोको नाम मिला, क्योंकि नाम पहले से ही 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 तक [[स्टेजकास्ट निर्माता]] के रूप में विपणन किया गया।
परिणामी सॉफ्टवेयर ढांचे को शीघ्रता के लिए कोको नाम मिला, क्योंकि नाम पहले से ही एप्पल द्वारा ट्रेडमार्क किया गया था। नाम के इस वर्तमान उपयोग से पहले कई वर्षों तक, एप्पल के कोको ट्रेडमार्क की उत्पत्ति बच्चों के लिए एक मल्टीमीडिया प्रोजेक्ट डिज़ाइन एप्लिकेशन के नाम के रूप में हुई थी। एप्लिकेशन किडसिम नाम के तहत [[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 तक [[स्टेजकास्ट निर्माता]] के रूप में विपणन किया गया।


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


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


ऑब्जेक्टिव-सी 2.0 से शुरू करते हुए, ऑब्जेक्टिव-सी रनटाइम ने एक वैकल्पिक ऑब्जेक्टिव-सी#गारबेज कलेक्शन लागू किया, जो अब अप्रचलित है और [[स्वचालित संदर्भ गिनती]] (एआरसी) के पक्ष में बहिष्कृत है। इस मॉडल में, रनटाइम ने कोको रेफरेंस काउंटिंग ऑपरेशंस जैसे रिटेन और रिलीज को नो-ऑप्स में बदल दिया। ऑब्जेक्टिव-सी 2.0 के आईओएस कार्यान्वयन पर कचरा संग्रहकर्ता मौजूद नहीं है। ऑब्जेक्टिव-सी में कचरा संग्रह कम प्राथमिकता वाले बैकग्राउंड थ्रेड पर चलता है, और उपयोगकर्ता अनुभव को उत्तरदायी बनाए रखने के इरादे से कोको के उपयोगकर्ता ईवेंट पर रोक लगा सकता है। पुराने गारबेज संग्राहक अभी भी Mac OS X संस्करण 10.13 पर उपलब्ध है, लेकिन Apple द्वारा प्रदान किया गया कोई भी एप्लिकेशन इसका उपयोग नहीं करता है।
ऑब्जेक्टिव-सी 2.0 से शुरू करते हुए, ऑब्जेक्टिव-सी कार्यावधि ने एक वैकल्पिक ऑब्जेक्टिव-सी#गारबेज कलेक्शन लागू किया, जो अब अप्रचलित है और [[स्वचालित संदर्भ गिनती]] (एआरसी) के पक्ष में बहिष्कृत है। इस मॉडल में, कार्यावधि ने कोको रेफरेंस काउंटिंग ऑपरेशंस जैसे रिटेन और रिलीज को नो-ऑप्स में बदल दिया। ऑब्जेक्टिव-सी 2.0 के आईओएस कार्यान्वयन पर कचरा संग्रहकर्ता उपस्थित नहीं है। ऑब्जेक्टिव-सी में कचरा संग्रह कम प्राथमिकता वाले बैकग्राउंड थ्रेड पर चलता है, और उपयोगकर्ता अनुभव को उत्तरदायी बनाए रखने के इरादे से कोको के उपयोगकर्ता ईवेंट पर रोक लगा सकता है। पुराने गारबेज संग्राहक अभी भी Mac OS X संस्करण 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]] पर आधारित है। फाउंडेशन एक सामान्य वस्तु-उन्मुख पुस्तकालय है जो [[स्ट्रिंग (कंप्यूटर विज्ञान)]] और मूल्य हेरफेर, [[कंटेनर (डेटा संरचना)]] और पुनरावृत्ति, वितरित कंप्यूटिंग, [[घटना पाश]] (रन लूप) और अन्य फ़ंक्शन प्रदान करता है जो सीधे [[ग्राफिकल यूज़र इंटरफ़ेस]] से बंधे नहीं हैं। एनएस उपसर्ग, सभी वर्गों और ढांचे में [[स्थिर (प्रोग्रामिंग)]] के लिए उपयोग किया जाता है, कोको की ओपेनस्टेप विरासत से आता है, जिसे नेक्स्ट और [[सन माइक्रोसिस्टम्स]] द्वारा संयुक्त रूप से विकसित किया गया था।
* फाउंडेशन किट (फाउंडेशन), पहली बार 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]] पर आधारित है। फाउंडेशन एक सामान्य वस्तु-उन्मुख पुस्तकालय है जो [[स्ट्रिंग (कंप्यूटर विज्ञान)]] और मूल्य हेरफेर, [[कंटेनर (डेटा संरचना)]] और पुनरावृत्ति, वितरित कंप्यूटिंग, [[घटना पाश]] (रन लूप) और अन्य फ़ंक्शन प्रदान करता है जो सीधे [[ग्राफिकल यूज़र इंटरफ़ेस]] से बंधे नहीं हैं। एनएस उपसर्ग, सभी वर्गों और ढांचे में [[स्थिर (प्रोग्रामिंग)]] के लिए उपयोग किया जाता है, कोको की ओपेनस्टेप विरासत से आता है, जिसे नेक्स्ट और [[सन माइक्रोसिस्टम्स]] द्वारा संयुक्त रूप से विकसित किया गया था।
* एप्लिकेशन किट (AppKit) सीधे मूल NeXTSTEP एप्लिकेशन किट से ली गई है। इसमें कोड प्रोग्राम शामिल हैं जिनका उपयोग ग्राफिकल यूजर इंटरफेस बनाने और बातचीत करने के लिए किया जा सकता है। ऐपकिट फाउंडेशन के शीर्ष पर बनाया गया है, और उसी एनएस उपसर्ग का उपयोग करता है।
* एप्लिकेशन किट (AppKit) सीधे मूल NeXTSTEP एप्लिकेशन किट से ली गई है। इसमें कोड प्रोग्राम सम्मिलित हैं जिनका उपयोग ग्राफिकल यूजर इंटरफेस बनाने और बातचीत करने के लिए किया जा सकता है। ऐपकिट फाउंडेशन के शीर्ष पर बनाया गया है, और उसी एनएस उपसर्ग का उपयोग करता है।
* कोर डेटा फाउंडेशन और कोको के साथ शामिल ऑब्जेक्ट पर्सिस्टेंस फ्रेमवर्क है और Cocoa.h में पाया जाता है।<ref name="apple1"/>
* कोर डेटा फाउंडेशन और कोको के साथ सम्मिलित ऑब्जेक्ट पर्सिस्टेंस प्राधार है और कोको.h में पाया जाता है।<ref name="apple1"/>


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


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


* मॉडल वर्ग समस्या डोमेन डेटा और संचालन का प्रतिनिधित्व करते हैं (जैसे कि लोगों/विभागों/बजटों की सूची; अनुभागों/अनुच्छेदों/शैलीकृत पाठ के फुटनोट वाले दस्तावेज़)।
* मॉडल वर्ग समस्या डोमेन डेटा और संचालन का प्रतिनिधित्व करते हैं (जैसे कि लोगों/विभागों/बजटों की सूची; अनुभागों/अनुच्छेदों/शैलीकृत पाठ के फुटनोट वाले दस्तावेज़)।
Line 62: Line 63:
मैक ओएस एक्स 10.3 में, ऐप्पल ने वर्गों के एनएससीकंट्रोलर परिवार की शुरुआत की, जो नियंत्रक परत के लिए पूर्वनिर्धारित व्यवहार प्रदान करते हैं। इन वर्गों को [[कोको बाइंडिंग्स]] सिस्टम का हिस्सा माना जाता है, जो [[की-वैल्यू ऑब्जर्विंग]] और [[की-वैल्यू बाइंडिंग]] जैसे प्रोटोकॉल का व्यापक उपयोग करता है। शब्द 'बाध्यकारी' दो वस्तुओं के बीच संबंध को संदर्भित करता है, अक्सर एक दृश्य और एक नियंत्रक के बीच। बाइंडिंग, डेवलपर को ठीक-ठाक व्यवहार करने के बजाय घोषणात्मक संबंधों पर अधिक ध्यान केंद्रित करने की अनुमति देती है।
मैक ओएस एक्स 10.3 में, ऐप्पल ने वर्गों के एनएससीकंट्रोलर परिवार की शुरुआत की, जो नियंत्रक परत के लिए पूर्वनिर्धारित व्यवहार प्रदान करते हैं। इन वर्गों को [[कोको बाइंडिंग्स]] सिस्टम का हिस्सा माना जाता है, जो [[की-वैल्यू ऑब्जर्विंग]] और [[की-वैल्यू बाइंडिंग]] जैसे प्रोटोकॉल का व्यापक उपयोग करता है। शब्द 'बाध्यकारी' दो वस्तुओं के बीच संबंध को संदर्भित करता है, अक्सर एक दृश्य और एक नियंत्रक के बीच। बाइंडिंग, डेवलपर को ठीक-ठाक व्यवहार करने के बजाय घोषणात्मक संबंधों पर अधिक ध्यान केंद्रित करने की अनुमति देती है।


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


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


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


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


लेट स्टैटिक बाइंडिंग स्टैटिक और डायनेमिक बाइंडिंग के बीच कहीं बाइंडिंग का एक प्रकार है। प्रोग्राम चलाने से पहले नामों की बाइंडिंग को स्टेटिक (प्रारंभिक) कहा जाता है; प्रोग्राम रन के रूप में निष्पादित बाइंडिंग गतिशील (देर से या वर्चुअल) हैं।
लेट स्टैटिक बाइंडिंग स्टैटिक और डायनेमिक बाइंडिंग के बीच कहीं बाइंडिंग का एक प्रकार है। प्रोग्राम चलाने से पहले नामों की बाइंडिंग को स्टेटिक (प्रारंभिक) कहा जाता है; प्रोग्राम रन के रूप में निष्पादित बाइंडिंग गतिशील (देर से या वर्चुअल) हैं।
Line 78: Line 79:
कोको की सबसे उपयोगी विशेषताओं में से एक शक्तिशाली आधार वस्तु है जो सिस्टम आपूर्ति करता है। उदाहरण के तौर पर, फाउंडेशन कक्षाओं पर विचार करें <code>NSString</code> और <code>NSAttributedString</code>, जो [[यूनिकोड]] स्ट्रिंग (कंप्यूटर विज्ञान) प्रदान करते हैं, और <code>[[NSText]]</code> AppKit में सिस्टम, जो प्रोग्रामर को GUI में स्ट्रिंग ऑब्जेक्ट रखने की अनुमति देता है।
कोको की सबसे उपयोगी विशेषताओं में से एक शक्तिशाली आधार वस्तु है जो सिस्टम आपूर्ति करता है। उदाहरण के तौर पर, फाउंडेशन कक्षाओं पर विचार करें <code>NSString</code> और <code>NSAttributedString</code>, जो [[यूनिकोड]] स्ट्रिंग (कंप्यूटर विज्ञान) प्रदान करते हैं, और <code>[[NSText]]</code> AppKit में सिस्टम, जो प्रोग्रामर को GUI में स्ट्रिंग ऑब्जेक्ट रखने की अनुमति देता है।


<code>NSText</code> और इसके संबंधित वर्गों का उपयोग स्ट्रिंग्स को प्रदर्शित करने और संपादित करने के लिए किया जाता है। शामिल वस्तुओं का संग्रह एक आवेदन को एक साधारण एकल-पंक्ति पाठ प्रविष्टि क्षेत्र से पूर्ण बहु-पृष्ठ, बहु-स्तंभ पाठ लेआउट स्कीमा में पूर्ण पेशेवर [[टाइपोग्राफी]] सुविधाओं जैसे [[कर्निंग]], लिगचर (टाइपोग्राफी), चलने वाले पाठ के साथ कुछ भी लागू करने की अनुमति देता है। मनमाने [[आकार]] के आसपास, [[ROTATION]], पूर्ण यूनिकोड समर्थन, और स्थानिक एंटी-अलियासिंग | एंटी-अलियास [[ग्लिफ़]] रेंडरिंग। अनुच्छेद लेआउट स्वचालित रूप से या उपयोगकर्ता द्वारा नियंत्रित किया जा सकता है, एक अंतर्निहित [[शासक]] वस्तु का उपयोग करके जिसे किसी भी पाठ दृश्य से जोड़ा जा सकता है। भाषा शब्दकोशों के सिस्टम-वाइड सेट का उपयोग करते हुए, वर्तनी जाँच स्वचालित है। असीमित पूर्ववत/फिर से करें समर्थन अंतर्निहित है। केवल अंतर्निहित सुविधाओं का उपयोग करके, कोड की 10 पंक्तियों के रूप में एक पाठ संपादक एप्लिकेशन लिख सकता है। नए कंट्रोलर ऑब्जेक्ट के साथ, यह शून्य की ओर गिर सकता है।
<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 की अवधारणा शामिल है कैटेगरी], जो मौजूदा क्लास को इन-प्लेस संशोधित करने की अनुमति देता है। ढांचे में मूल कक्षाओं में किसी भी बदलाव के बिना, या यहां तक ​​​​कि इसके स्रोत तक पहुंच के बिना किसी श्रेणी में कार्यक्षमता को पूरा किया जा सकता है। अन्य सामान्य भाषाओं में, इसी कार्य के लिए अतिरिक्त सुविधाओं का समर्थन करने के लिए एक नया उपवर्ग प्राप्त करने की आवश्यकता होती है, और फिर मूल वर्ग के सभी उदाहरणों को नए उपवर्ग के उदाहरणों से बदलना पड़ता है।
जब एक्सटेंशन की आवश्यकता होती है, तो कोको का ऑब्जेक्टिव-सी का उपयोग इसे एक सीधा काम बनाता है। ऑब्जेक्टिव-सी में [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 में, Apple ने घोषणा की कि जावा ब्रिज को पदावनत किया जाना था, जिसका अर्थ है कि 10.4 के बाद के macOS संस्करणों में कोको में जोड़े गए फीचर कोको-जावा प्रोग्रामिंग इंटरफ़ेस में नहीं जोड़े जाएंगे।
कोको प्राधार ऑब्जेक्टिव-सी में लिखे गए हैं। कोको प्राधार के लिए जावा [[भाषा बंधन]] (जिसे जावा ब्रिज कहा जाता है) को ऑब्जेक्टिव-सी को एक अधिक लोकप्रिय भाषा के साथ बदलने के उद्देश्य से भी उपलब्ध कराया गया था।<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 के बाद के 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>
[[Apple वर्ल्डवाइड डेवलपर्स कॉन्फ्रेंस|एप्पल वर्ल्डवाइड डेवलपर्स कॉन्फ्रेंस]] (WWDC) 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>




===ऐप्पलस्क्रिप्टओबीजेसी===
===ऐप्पलस्क्रिप्टओबीजेसी===
मूल रूप से, 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>
मूल रूप से, एप्पलScript 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|एप्पलScript]]ObjC से बदल दिया गया, जो कोको प्राधार का उपयोग करते हुए एप्पलScript में प्रोग्रामिंग की अनुमति देता है।<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|Pasकोको]], पीओओबीजेसी, [[कैमलबोन्स]], [[RubyCocoa|Rubyकोको]], और [[डी (प्रोग्रामिंग भाषा)]] / ऑब्जेक्टिव-सी ब्रिज जैसे भाषा बंधन की सहायता से अन्य उपकरणों का उपयोग करके अभिगमन किया जा सकता है।


<!--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.-->अन्य भाषाओं के लिए उपलब्ध तृतीय-पक्ष बाइंडिंग में एप्पलScript, [[Clozure CL]], [[Monobjc]] और [[NObjective]] (C Sharp (प्रोग्रामिंग भाषा)|C#), कोको Sharp|कोको# (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|FPC Pasकोको]] ([[Lazarus (IDE)]] और [[Free Pascal]]), Rubyकोको ([[रूबी (प्रोग्रामिंग भाषा)]])।<ref>[http://osx.hyperjeff.net/Reference/cocoa.php more extensive list of implementations]</ref>
[[MacRuby]] नाम की एक रूबी भाषा का कार्यान्वयन, जो एक पुल तंत्र की आवश्यकता को दूर करता है, पूर्व में Apple द्वारा विकसित किया गया था, जबकि Nu (प्रोग्रामिंग भाषा) एक [[लिस्प (प्रोग्रामिंग भाषा)]] जैसी भाषा है जो ऑब्जेक्टिव-सी ऑब्जेक्ट मॉडल का सीधे उपयोग करती है, और इस प्रकार बंधन की आवश्यकता के बिना कोको ढांचे का उपयोग कर सकते हैं।
[[MacRuby]] नाम की एक रूबी भाषा का कार्यान्वयन, जो एक पुल तंत्र की आवश्यकता को दूर करता है, पूर्व में एप्पल द्वारा विकसित किया गया था, जबकि 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]] और [[Linux]] जैसे अन्य संचालन प्रणाली को लक्षित करने के लिए [[क्रॉस-प्लेटफॉर्म]] कोको एप्लिकेशन डेवलपमेंट की अनुमति देता है।


== यह भी देखें ==
== यह भी देखें ==
Line 125: Line 126:


==ग्रन्थसूची==
==ग्रन्थसूची==
*[[Aaron Hillegass]]: ''Cocoa Programming for Mac OS X'', Addison-Wesley, 3rd Edition 2008, Paperback, {{ISBN|0-321-50361-9}}.
*[[Aaron Hillegass]]: ''कोको Programming for Mac OS X'', Addison-Wesley, 3rd Edition 2008, Paperback, {{ISBN|0-321-50361-9}}.
*[[Stephen Kochan]]: ''Programming in Objective-C'', Sams, 1st Edition 2003, Paperback, {{ISBN|0-672-32586-1}}.
*[[Stephen Kochan]]: ''Programming in Objective-C'', Sams, 1st Edition 2003, Paperback, {{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]], [[James Duncan Davidson]]: ''कोको in a Nutshell'', O'Reilly, 1st Edition 2003, Paperback, {{ISBN|0-596-00462-1}}.
*[[Erick Tejkowski]]: ''Cocoa Programming for Dummies'', 1st Edition 2003, Paperback, {{ISBN|0-7645-2613-8}}.
*[[Erick Tejkowski]]: ''कोको Programming for Dummies'', 1st Edition 2003, Paperback, {{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 Objective-C'', O'Reilly, 3rd Edition 2012, Paperback, {{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]], [[Erik M. Buck]], [[Donald A. Yacktman]]: ''कोको Programming'', Sams, 1st Edition 2002, Paperback, {{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]], [[Donald A. Yacktman]]: ''कोको Design Patterns'', Addison-Wesley Professional, 1st Edition 2009, Paperback, {{ISBN|978-0321535023}}
*[[Bill Cheeseman]]: ''Cocoa Recipes for Mac OS X'', Peachpit Press, 1st Edition 2002, Paperback, {{ISBN|0-201-87801-1}}.
*[[Bill Cheeseman]]: ''कोको Recipes for Mac OS X'', Peachpit Press, 1st Edition 2002, Paperback, {{ISBN|0-201-87801-1}}.
*Andrew Duncan: ''Objective-C Pocket Reference, O'Reilly'', 1st Edition 2002, Paperback, {{ISBN|0-596-00423-0}}.
*Andrew Duncan: ''Objective-C Pocket Reference, O'Reilly'', 1st Edition 2002, Paperback, {{ISBN|0-596-00423-0}}.


Line 139: Line 140:
==बाहरी संबंध==
==बाहरी संबंध==
* {{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 Mac Developer Library, कोको Layer], एप्पल's documentation
* [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], Mac programming forum
* [http://www.cocoadevcentral.com/ Cocoa Dev Central]
* [http://www.cocoadevcentral.com/ कोको Dev Central]
* [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 Stack Overflow: कोको]<!-- Stack Overflow is a popular and well regarded when it comes to Cocoa and Cocoa Touch -->


{{macOS}}
{{macOS}}

Revision as of 12:58, 4 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

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

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

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

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

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

इतिहास

कोको 1980 और 1990 के दशक में NeXT द्वारा विकसित NeXTSTEP और OpenStep प्रोग्रामिंग वातावरण से कई सॉफ्टवेयर ढांचा (मुख्य रूप से ऐप किट और फाउंडेशन किट) के वंश को जारी रखता है। एप्पल ने दिसंबर 1996 में NeXT का अधिग्रहण किया, और बाद में Rhapsody (संचालन प्रणाली) संचालन प्रणाली पर काम करना शुरू कर दिया, जो OpenStep का प्रत्यक्ष उत्तराधिकारी था। ब्लू बॉक्स नामक क्लासिक मैक ओएस अनुप्रयोगों के लिए इसका अनुकरण आधार होना था। पुस्तकालयों और बाइनरी समर्थन के ओपनस्टेप आधार को येलो बॉक्स कहा गया। रैप्सोडी मैक ओएस एक्स में विकसित हुआ, और येलो बॉक्स कोको बन गया। इस प्रकार, कोको कक्षाएं एनएस अक्षरों से शुरू होती हैं, जैसे एनएसएसटींग या एनएसएआरएआरई। ये OpenStep प्राधार, NeXTSTEP के लिए मूल स्वामित्व शब्द के लिए हैं।[2] OpenStep को विकसित करने में किए गए अधिकांश कार्य Mac OS X को विकसित करने के लिए लागू किए गए थे, कोको सबसे अधिक दिखाई देने वाला भाग था। हालाँकि, मतभेद उपस्थित हैं। उदाहरण के लिए, नेक्स्टस्टेप और ओपनस्टेप ने टेक्स्ट और ग्राफिक्स के ऑन-स्क्रीन डिस्प्ले के लिए पोस्टस्क्रिप्ट प्रदर्शित करें का इस्तेमाल किया, जबकि कोको एप्पल के क्वार्ट्ज (ग्राफिक्स परत) पर निर्भर करता है (जो संवहन दस्तावेज़ स्वरूप (पीडीएफ) इमेजिंग मॉडल का उपयोग करता है, लेकिन इसकी अंतर्निहित तकनीक का नहीं)। कोको में इंटरनेट समर्थन का एक स्तर भी है, जिसमें NSURL और WebKit HTML कक्षाएं और अन्य सम्मिलित हैं, जबकि OpenStep के पास NSFileHandle क्लासेस और बर्कले सॉकेट्स के माध्यम से प्रबंधित नेटवर्क कनेक्शन के लिए केवल अल्पविकसित समर्थन था।

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

मेमोरी मैनेजमेंट

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

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

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

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

मुख्य चौखटे

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

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

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

मॉडल-व्यू-कंट्रोलर

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

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

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

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

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

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

लेट बाइंडिंग

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

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

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

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

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

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

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

कार्यान्वयन और बाइंडिंग

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

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


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

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


अन्य बंधन

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

अन्य भाषाओं के लिए उपलब्ध तृतीय-पक्ष बाइंडिंग में एप्पलScript, Clozure CL, Monobjc और NObjective (C Sharp (प्रोग्रामिंग भाषा)|C#), कोको Sharp|कोको# (CLI), Cocodao and D (प्रोग्रामिंग भाषा)/Objective-C ब्रिज सम्मिलित हैं।[12][13] LispWorks, Object Pascal, CamelBones (Perl), PyObjC (Python (प्रोग्रामिंग भाषा)), FPC Pasकोको (Lazarus (IDE) और Free Pascal), Rubyकोको (रूबी (प्रोग्रामिंग भाषा))।[14] MacRuby नाम की एक रूबी भाषा का कार्यान्वयन, जो एक पुल तंत्र की आवश्यकता को दूर करता है, पूर्व में एप्पल द्वारा विकसित किया गया था, जबकि Nu (प्रोग्रामिंग भाषा) एक लिस्प (प्रोग्रामिंग भाषा) जैसी भाषा है जो ऑब्जेक्टिव-सी ऑब्जेक्ट मॉडल का सीधे उपयोग करती है, और इस प्रकार बंधन की आवश्यकता के बिना कोको ढांचे का उपयोग कर सकते हैं।

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

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

यह भी देखें


संदर्भ

  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.


ग्रन्थसूची


बाहरी संबंध