2012-03-17 15 views
7

मैं सोच रहा हूं कि ऐप्पल कोर फाउंडेशन में डेटा प्रकारों का उपयोग क्यों करता है जो कोको में रहते हुए पॉइंटर प्रकार के टाइप किए गए हैं।ऐप्पल ने पहले टाइप किए गए संदर्भ (सूचक) प्रकार क्यों नहीं बल्कि अब?

उदाहरण के तौर पर, आप UIColor * जैसे यूआईसीओलर ऑब्जेक्ट को संदर्भित करेंगे जबकि CGColor ऑब्जेक्ट का संदर्भ CGColorRef होगा? या NSURL * और CFURLRef? क्यों न केवल CGColor * और CFURL * का उपयोग करें? या इसके विपरीत, UIColorRef या NSURLRef प्रकार क्यों नहीं, क्योंकि आप कभी भी UIColor या NSURL तक कभी भी एक्सेस नहीं करते हैं?

या उदाहरण के लिए, यह id क्यों है और id * नहीं है, क्योंकि यह वास्तव में एक सूचक है और वास्तव में void * पर टाइपकास्ट हो सकता है?

विशेष रूप से, क्या कुछ कारण है कि ऐप्पल को अपने पुराने ढांचे में ऐसा करने की आदत थी, लेकिन कोको में ऐसा करना बंद कर दिया? क्या यह सिर्फ शैली का मामला है?

+0

कोको वास्तव में कोर फाउंडेशन से अधिक पुराना है। –

+0

आह मैं उस एहसास नहीं था। मैं हमेशा मान लिया यह नये से एक था। –

+0

और वास्तव में अब आप इसका जिक्र करते हैं, मुझे एहसास हुआ कि यह नेक्सट्सटेप का हिस्सा था, मुझे लगता है कि मैं ऐप्पल के ढांचे के हिस्से के रूप में नया सोच रहा था। –

उत्तर

8

क्या मैट ने कहा, लेकिन इसके लिए थोड़ा और कुछ है।

सी आधारित एपीआई में टाइपपीफ भी कार्यान्वयन के विवरण छिपाने की अनुमति देते हैं। उदाहरण के लिए, आप सार्वजनिक हेडर में __CFURL संरचना को कभी भी परिभाषित किए बिना निम्नलिखित प्राप्त कर सकते हैं।

typedef __CFURL *CFURLRef; 

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

ध्यान दें कि कोको ढांचे लंबे, लंबे, पूर्व-दिनांकित कोरफाउंडेशन।

id का उपयोग id * के बजाय किया जाता है, जो उस समय की तारीख है जब उद्देश्य-सी पहली बार 1 9 80 के दशक में बनाया गया था। विशेष रूप से, भाषा की धारणा यह थी कि आप "सॉफ़्टवेयर एकीकृत सर्किट" बनाएंगे जिन्हें वास्तविक आईसीएस की तरह "एक साथ प्लग" किया जा सकता है। लक्ष्य सी बिट्स को कार्यान्वयन विवरण के रूप में रखना था, और आदर्श रूप से, आपके एपीआई में खुलासा नहीं किया गया था।

तुम क्यों NSString के बजाय NSString * साथ अंत के रूप में, कि मोटे तौर पर वास्तव में भाषा की सी आधार की वजह से है। मैं एक अलग तो सवाल यह है कि प्रासंगिक है करने के लिए एक fairly detailed answer लिखा था।

आप शायद भी this answer relevant भी मिल जाएगा। (NeXTSTEP के रूप में)

+0

वाह महान उत्तर, धन्यवाद :) –

+0

आह अच्छा @bbum :-)। मैं अपने जवाब में भी कहने जा रहा था "लेकिन कृपया @bbum बोलने के लिए प्रतीक्षा करें"! मैंने जवाब देने का भी प्रयास किया, मैंने कसम खाई है कि आपने 'id' बनाम' id * 'के बारे में लिखा था, लेकिन पूरी तरह असफल रहा। हालांकि यहां महान जवाब। – mattjgalloway

1

NSURL* बनाम CFURLRef के कारण का कारण यह है कि यह सिर्फ कोडिंग शैली है। कोको एक उद्देश्य-सी एपीआई है और उद्देश्य-सी में सामान्य शैली में टाइपिफ़ नहीं है जबकि कोर फाउंडेशन एक सी एपीआई है और इसकी सामान्य शैली टाइपिफ़ का उपयोग करना है। यह कोडिंग शैली के लिए बहुत नीचे है।

id बनाम id* - मैं पूरी तरह से उस के साथ यकीन है कि नहीं हूँ, लेकिन मेरा अनुमान है कि यह ऐतिहासिक है और वे बस आधार "वस्तु" * बिना रहना होगा करना चाहता था। मैं निश्चित रूप से उस के इतिहास के बारे में नहीं जानता, हालांकि। लेकिन फिर यह सिर्फ एक शैली की बात होगी।