2010-01-02 17 views
8

यह प्रश्न शुद्ध जिज्ञासा से बाहर है। कोको कैसे आईडी प्रकार को परिभाषित करता है? क्या यह शून्य के लिए सिर्फ एक टाइपिफ़ है? साथ ही, यदि आप जानते हैं कि कौन सी शीर्षलेख फ़ाइल में परिभाषित किया गया है, तो मुझे एक नज़र डालने में दिलचस्पी होगी।कोको में, आईडी प्रकार कैसे परिभाषित किया गया है?

उत्तर

23

कमांड कुंजी दबाए रखें और इसकी परिभाषा पर कूदने के लिए किसी भी हाइलाइट किए गए शब्द पर डबल क्लिक करें।

typedef struct objc_class *Class; 
typedef struct objc_object { 
    Class isa; 
} *id; 


typedef struct objc_selector *SEL;  
typedef id   (*IMP)(id, SEL, ...); 
+1

+1 cmd + डबल क्लिक करें पर एक एहसान करना होगा आश्चर्यजनक रूप से उपयोगी है! –

+0

+1 ग्रेट उत्तर। मैं अगले वर्ष में एक्सकोड के साथ और अधिक काम करने की उम्मीद करता हूं, और कीबोर्ड शॉर्टकट जानना बहुत उपयोगी होगा। –

+0

+1 अपने स्वयं के जवाब पर भी। मुझे पहले से ही यह पता था, लेकिन यह बहुत उपयोगी है। – Mike

6

objc.h

typedef struct objc_class *Class; 
typedef struct objc_object { 
    Class isa; 
} *id; 

में अपने दम पर जानने के लिए, XCode में, राइट क्लिक करें आईडी - या किसी भी अन्य प्रकार - और परिभाषा करने के लिए कूद का चयन करें। अन्य सी/सी ++ आधारित ऑब्जेक्ट सिस्टम की समानताओं को ध्यान में रखना दिलचस्प है; ऑब्जेक्ट पॉइंटर - एक आईडी - एक स्ट्रक्चर को इंगित करता है जो साझा कक्षा की जानकारी के बिंदु से शुरू होता है। मैं कई सी ++ कार्यान्वयन, जो वर्चुअल फ़ंक्शन टेबल होगा, क्योंकि यह माइक्रोसॉफ्ट के COM के साथ होगा। कोको में, objc_class के विवरण हेडर फ़ाइल में हमें प्रकट नहीं किए जाते हैं।

2

id प्रकार आम तौर पर घोषित की तरह है:

typedef struct objc_object *id; 

यह ऑब्जेक्टिव-सी के लिए महत्वपूर्ण ++ है जहां प्रकार एक घायल समारोह नाम का हिस्सा है।

आप /usr/include/objc/objc.h में एक नज़र

7

यह (तेंदुआ पर) /usr/include/objc/objc.h में delcared है ले जा सकते हैं इस प्रकार है:

typedef struct objc_object { 
    Class isa; 
} *id; 

कौन सा इसका मतलब है void * नहीं है पर सभी, बल्कि एक संरचना के लिए एक सूचक जिसमें एक एकल सदस्य होता है, जो कक्षा परिभाषा को इंगित करता है। वास्तव में दिलचस्प है।

मुझे याद है जब मैं सी में जा रहा था और सीख रहा था कि उद्देश्य-सी शुरू में सी के शीर्ष पर केवल एक प्रीप्रोसेसर परत के रूप में लागू किया गया था। यह अब ऐसा नहीं है।

विषय पर सबसे अच्छा पढ़ने मैंने पाया:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

संबंधित मुद्दे