/ / उद्देश्य C में कार्य कैसे आवंटित होता है? - उद्देश्य सी

कैसे alloc उद्देश्य सी में काम करता है? -उद्देश्य-सी

मुझे पता है कि आबंटन एक वर्ग विधि है जो कक्षा का उद्देश्य बनाता है और कक्षा को इसके "आईएए" सूचक को इंगित करता है और यह बताता है कि रनटाइम पर संदेश कैसे मैप किए जाते हैं।

और मेरे पास आवंटन और जोन के बारे में कुछ विचार है।

क्या कोई मुझे बता सकता है या मुझे एक अच्छे लिंक की ओर इशारा कर सकता है जो बताता है: -

ईए पॉइंटर को सही वर्ग की ओर कैसे इंगित किया जाता है?

कितनी मेमोरी आवंटित की है?

अभिभावक वर्ग से विरासत में प्राप्त सदस्यों के लिए स्मृति कैसे बनाई जाती है?

अगर आईडी * objc_object * के लिए एक टाइपराइफ है, तो क्या होता हैइसका आइसा पॉइंटर पॉइंट है, फिर यह किसी भी तरह से कैसे रोक सकता है क्योंकि आइसा पॉइंटर हमें डिस्पैच टेबल पर ले जाएगा, जिसमें विधियों के लिए चयनकर्ता हैं लेकिन क्या उनके पास ऐसा कुछ भी है जो हमें बताता है कि डेटा-सदस्यों के वहां होने का अनुमान है?

उत्तर:

जवाब के लिए 8 № 1

संकलक सम्मिलित करता है आप के लिए objc रनटाइम के माध्यम से, पर्दे के पीछे। आप अपने शामिल पथ में पुस्तकालय पा सकते हैं objc/. objc/runtime.h शायद सबसे ज्यादा दिलचस्पी होगी। एक बोनस के रूप में, कुछ सामान्य संदेशों को बायपास करते हैं objc_msgSend इन सम्मिलन के साथ।

ईए पॉइंटर को सही वर्ग की ओर कैसे इंगित किया जाता है?

objc_constructInstance

कितनी मेमोरी आवंटित की है?

class_createInstance
class_getInstanceSize

अभिभावक वर्ग से विरासत में प्राप्त सदस्यों के लिए स्मृति कैसे बनाई जाती है?

स्मृति शून्य है, और isa सेट है ।

अगर आईडी * objc_object * के लिए एक टाइपराइफ है, तो क्या होता हैइसका आइसा पॉइंटर पॉइंट है, फिर यह किसी भी तरह से कैसे रोक सकता है क्योंकि आइसा पॉइंटर हमें डिस्पैच टेबल पर ले जाएगा, जिसमें विधियों के लिए चयनकर्ता हैं लेकिन क्या उनके पास ऐसा कुछ भी है जो हमें बताता है कि डेटा-सदस्यों के वहां होने का अनुमान है?

आरंभ में जो कुछ भी निर्धारित किया गया था। ObjC ऑब्जेक्ट पॉइंटर्स सिर्फ कच्ची मेमोरी हैं। अन्य भाषाओं के विपरीत, लिखित प्रकारों की ढलाई और रूपांतरण चर के पते का प्रत्यक्ष सेट है - निम्नलिखित निर्माण में स्मृति में कोई स्पष्ट प्रकार का प्रचार या रूपांतरण नहीं है:

MONDisplay * display = [NSString string];
NSLog(@"%@", display);

सूचक केवल उसी मान द्वारा लौटाया गया है [NSString string].


उत्तर № 2 के लिए 1

सिर्फ चर्चा में जोड़ने के लिए, मुझे ऑब्जेक्टिव-सी इंटर्नल्स पर मेरे एक अन्य समान प्रश्न पर एक बहुत अच्छा लिंक मिला।

http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf

मुझे आशा है कि यह यहाँ पहुंचने वाले कई लोगों की मदद होगी :)