स्थिर स्ट्रिंग का उपयोग करना मैं एक छोटे से रूप में जब यह उपयोग करने के लिए सबसे अच्छा है करने के लिए उलझन में हूँ:जब बनाम #define
#define AppQuitGracefullyKey @"AppQuitGracefully"
मैं सी के लिए इस तरह सवाल देखा है की
static NSString *AppQuitGracefullyKey = @"AppQuitGracefully";
बजाय या C++ और मुझे लगता है कि यहाँ क्या अलग है कि इस उद्देश्य सी के लिए विशेष रूप है, एक वस्तु का उपयोग, और iPhone की तरह एक डिवाइस पर,, वहाँ ढेर किया जा सकता है कोड स्थान या स्मृति मुद्दों है कि मैं अभी तक समझ में नहीं आता है।
एक उपयोग होगा:
appQuitGracefully = [[NSUserDefaults standardUserDefaults] integerForKey: AppQuitGracefullyKey];
या यह शैली का मामला है?
धन्यवाद।
निरंतर स्ट्रिंग कोलेसिंग लिंकर संकलक का काम है, नहीं है। – kennytm
यह सही नहीं है। ऑब्जेक्टिव-सी का उपयोग करता है [स्ट्रिंग होना शामिल] (https://en.wikipedia.org/wiki/String_interning) के रूप में वर्णित [यहां] (http://nshipster.com/equality/)। 'define' _not_ प्रत्येक उपयोग के लिए स्ट्रिंग की एक प्रति स्टोर करता है। और @ केनेटीएम सही है, संकलक ऐसा करता है, लिंकर –
@ एंड्रेफ्राटेलि नहीं, वास्तव में, निरंतर स्ट्रिंग कोलेसिंग एक लिंकर अनुकूलन है, और इसे सी और सीएफ/एनएसएसआरटीएस दोनों के लिए ओएस एक्स/मैकोज़ में स्थिर लिंकर द्वारा कार्यान्वित किया जाता है। । यह स्ट्रिंग होना शामिल का उपयोग नहीं किया जाता है, और यह संकलक द्वारा नहीं किया जाता है (हालांकि संकलक वस्तु अपने सृजन फाइल बाहर लिखने से पहले तार ही सम्मिलित हो सकते हैं)। आप कोड को देख सकते हैं जो [लिंकर स्रोत] में करता है (http://opensource.apple.com/source/ld64/ld64-264.3.102/)। तो नहीं, केनिटम सही नहीं है; यह वास्तव में लिंकर है। – alastair