2009-12-02 13 views
5

प्रलेखन कहते हैं:एनएसओब्जेक्ट के बिना उद्देश्य-सी में रूट ऑब्जेक्ट कैसे बनाएं?

सख्ती से भाषा का एक हिस्सा, इसा सूचक ऑब्जेक्टिव-सी क्रम प्रणाली के साथ काम करने के लिए एक वस्तु के लिए आवश्यक है नहीं है। एक ऑब्जेक्ट संरचना परिभाषित करता है कि किसी भी क्षेत्र में संरचना objc_object (objc/objc.h में परिभाषित) पर "समतुल्य" होने की आवश्यकता है। हालांकि, शायद ही कभी, को अपनी खुद की मूल वस्तु, और NSObject या NSProxy से प्राप्त होने वाली ऑब्जेक्ट्स को स्वचालित रूप से आईएसए चर बनाने की आवश्यकता है।

हालांकि यह अच्छा लगता है, मुझे आश्चर्य है कि उद्देश्य-सी में किसी भी रूट ऑब्जेक्ट को कैसे बनाया जाएगा?

यह सीखने के उद्देश्यों के लिए है। मैं बस यह जानना चाहता हूँ। मैं वास्तव में इसे देखना चाहूंगा।

उत्तर

7

यह वास्तव में एक "जाल" है जो सी # या जावा स्टाइल भाषाओं से माइग्रेट करने वाले कुछ लोग आते हैं। जब अपने वर्ग यानी

@interface MyNewRoot { 
Class isa; 
} 
@end 

बनाम

@interface MyObject : NSObject { 
} 
@end 

जावा में या सी # इन बराबर होगा (पहले मामले में संकलक ग्रहण करेंगे System.Object या जावा की घोषणा आप बस एक सुपर क्लास निर्दिष्ट नहीं करते .lang.Object superclass था), लेकिन उद्देश्य-सी में ऐसा कोई डिफ़ॉल्ट नहीं माना जाएगा, और इसलिए एक नई जड़ बनाई गई है।

हालांकि अब आप अपनी कक्षा के लिए कई विशेषताओं के लिए ज़िम्मेदार हैं जिन्हें आप आम तौर पर मानते हैं (यहां तक ​​कि सरल उदाहरण जैसे नए उदाहरण आवंटित करने या नष्ट करने के लिए स्मृति प्रबंधन)। जब आप स्ट्रक्चर objc_object और आईएसए इंस्टेंस वैरिएबल इत्यादि के बारे में बात करते हैं तो यह उद्धरण उद्धृत करता है।

+0

MyNewRoot की आपकी परिभाषा में आईएसए पॉइंटर जोड़ा गया। आपके पास कोई वस्तु नहीं होने के साथ कोई ऑब्जेक्ट नहीं हो सकता है, आपको कम से कम कक्षा में पॉइंटर होना होगा। – NSResponder

+0

झूठी अलार्म _ "कक्षा" MyNewRoot से बचने के लिए बेस क्लास "_ क्लैंग चेतावनियां निर्दिष्ट किए बिना परिभाषित किया गया है, आप '#pragma clang diagnostic push' और'pragma clang diagnostic ignored' के साथ इंटरफ़ेस को लपेटने पर विचार करना चाहेंगे -Wobjc -रूट-क्लास "पहले और' #pragma clang डायग्नोस्टिक पॉप 'बाद में। –

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