2009-12-14 10 views
5

मैं कोको में किसी ऑब्जेक्ट के लिए वर्णनात्मक स्ट्रिंग चाहता हूं। मैं वर्णन विधि या स्ट्रिंग वैल्यू विधि को ओवरराइड करने के बारे में सोच रहा हूं। कौन सा बेहतर है और क्यों? एकमात्र दिशानिर्देश मुझे मिल सकता था in hereविवरण या स्ट्रिंग ओवरराइड कोको में वैल्यू?

आप ओवरराइडिंग विवरण से निराश हैं।

क्या यह वास्तव में आप सुझाव देंगे? कोई अन्य पसंदीदा ओवरराइड पॉइंट?

+1

आपका लिंक कोर डेटा के लिए प्रलेखन के लिए है - क्या आप एनएसएमएनेज्ड ऑब्जेक्ट के लिए वर्णन विधि को ओवरराइड करना चाहते हैं या कुछ और? –

+0

मुझे ऐसा नहीं लगता - यह एक स्थानिक बाउंडिंग बॉक्स और उस पर कुछ संचालन के लिए एनएसओब्जेक्ट सबक्लास होल्डिंग डेटा है। स्ट्रिंग विवरण मूल रूप से बाएं तल और शीर्ष दाएं निर्देशांक की अल्पविराम से अलग सूची है। – mvexel

उत्तर

5

description जाने का रास्ता, कि क्या यह एक वस्तु की स्ट्रिंग प्रतिनिधित्व आपूर्ति करने के लिए कहा जाता है है।

- (NSString*)description 
{ 
    return [NSString stringWithFormat:@"%@, %@; %@", a, b, c]; 
} 

मुझे विश्वास है कि हिलेगैस की पुस्तक द्वारा भी सुझाव दिया गया है।

+0

धन्यवाद, हिलेग्रास अनुस्मारक के लिए भी;) – mvexel

7

मैं व्यक्तिगत रूप से मेरे द्वारा बनाए गए सभी सबक्लास में description को ओवरराइड करता हूं। मुझे लगता है, जैसे टॉम डकरिंग अपनी टिप्पणी में लिखते हैं, कि आपका उद्धरण केवल प्रबंधित ऑब्जेक्ट्स पर लागू होता है।

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"%@ <%p>", NSStringFromClass([self class]), self]; 
} 
2

आप [NSObject डीबग डिस्क्रिप्शन] को ओवरराइड भी कर सकते हैं जिसे डीबगर द्वारा बुलाया जाता है। डीबगर में "प्रिंट टू कंसोल" का उपयोग करते समय इसे कहा जाता है। आप इसे सीधे एनएसएलओजी में भी कॉल कर सकते हैं।

अधिकांश कक्षाओं में डिफ़ॉल्ट रूप से debugDescription बस description पर कॉल करता है लेकिन आप उन्हें अलग-अलग तारों को वापस कर सकते हैं। विवरण के साथ आउटपुट लोड करने के लिए यह एक अच्छी जगह है।

श्रेणियाँ आपके कस्टम वर्ग और मौजूदा कक्षाओं दोनों के लिए विधि को पार्क करने के लिए एक अच्छी जगह है। यह विशेष रूप से उपयोगी है क्योंकि आप डिबग बिल्ड में श्रेणी शामिल कर सकते हैं लेकिन रिलीज में इसे बाहर कर सकते हैं। यदि श्रेणी मौजूद नहीं है, तो कोड इसके बजाय डिफ़ॉल्ट क्लास विधि को कॉल करता है।

मेरे पास UIView के लिए एक डिबगिंग श्रेणी है जो हर विशेषता को डंप कर सकती है जिसे मैं सोच सकता हूं। अगर मैंने एक बुरा बग मारा तो मैं सिर्फ श्रेणी शामिल करता हूं और फिर मैं डीबगर कंसोल में हर दृश्य के बारे में सबकुछ देख सकता हूं।

4

अन्य दिशा से अपने प्रश्न का उत्तर देने के लिए, stringValue कुछ अलग है - यह रिसीवर का वर्णन नहीं करता है, यह इसकी एक संपत्ति है। आपके कस्टम description में stringValue भी शामिल हो सकता है, या यदि यह लंबा है तो इसका एक अंश भी शामिल हो सकता है।

एक महत्वपूर्ण अंतर यह है कि stringValue अक्सर एक म्यूटेबल संपत्ति (उदाहरण के लिए, एनएससींट्रोल की है) देखें, जबकि description मांग पर गणना की गई एक अपरिवर्तनीय संपत्ति है।

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