new operator - new on objective-c -
मैं यह करना चाहता हूं:
[[क्लास ए नया] addObject: [[क्लास नया] addObject: [क्लास ए नया]]];
लेकिन कंपाइलर देता है:
"त्रुटि: शून्य अभिव्यक्ति का अमान्य उपयोग"
क्या कोई तरीका है इसे करने के लिए? जैसे जावा में:
क्लास ए = न्यू क्लास (नया क्लास (नया क्लास ए ()));
असली समस्या यह है कि - [वर्ग ए addObject:]
बहुत संभावना में रिक्त प्रकार का शून्य है, इसलिए आप उस अभिव्यक्ति को बाहरी -addObject
: कॉल के तर्क के रूप में घोंसला नहीं कर सकते। उदाहरण के लिए, दस्तावेज देखें - विधि हस्ताक्षर - (शून्य) addObject: (id) anObject
है। यदि आप किसी अन्य भाषा में विशेष रूप से जावा में अलग-अलग व्यवहार करने के लिए उपयोग किया जाता है, तो यह आपको गार्ड से बचा सकता है यह भी ध्यान रखें कि -removeObject:
रिटर्न शून्य
, उस ऑब्जेक्ट को नहीं हटाया गया था।
इसके अलावा, हर कोई यह बात गुम है कि + नए
को ओवरराइड होने तक विरासत में मिला है - देखें। हालांकि, + new
का उपयोग "प्रचलित से बाहर" है, और + alloc / -init ...
पसंदीदा है एक कारण यह है कि जब से + new
को -init
को कॉल करता है, तो आपको एक-दूसरे को ... प्रत्येक कक्षा में मिलान करने के लिए ... नया वर्ग बनाना चाहिए। उस बिंदु तक, आपको गैर-समस्या को हल करने के लिए बहुत अधिक अनावश्यक कोड प्राप्त होता है मैं व्यक्तिगत रूप से केवल + नया
बहुत कम समय का उपयोग करता हूं, और केवल जब मुझे पता है कि मैं केवल -init
का उपयोग कर रहा हूं।
चूंकि आप जावा की पृष्ठभूमि, यदि आप उत्सुक हैं कि उद्देश्य सी क्यों सभी तरह जावा, सी ++, आदि के बजाय alloc / init का उपयोग करता है।
Comments
Post a Comment