दिलचस्प पोस्ट
एंड्रॉइड अधिसूचना बार और शीर्षक बार का आकार? jQuery। पर काम नहीं करता है लेकिन जावा कोड के लिए कमांड लाइन यूनिकोड तर्क पास करना वेब एपीआई में कई फिल्टर के साथ निष्पादन का आदेश php चर html से कोई अन्य तरीका नहीं है: <? php echo $ var; ?> मैं एक सरणी कैसे फेर सकते हैं? जावा में TIFF छवि पढ़ना और लिखना पायथन कॉन्फ़्रैपपरर्स .i फ़ाइल को ठीक से नहीं खोज पा रहा है (उबंटु 14, पायथन 3.4) IIS / ASP.NET के सभी उपयोगकर्ता खाते क्या हैं और वे अलग-अलग कैसे हैं? मैं iOS सिम्युलेटर से कंसोल लॉग कैसे प्राप्त करूं? जवाफिक्स: स्थान त्रुटि सेट नहीं है पृष्ठभूमि सेवा से मैं एंड्रॉइड गतिविधि में जानकारी कैसे अपडेट कर सकता हूं सुपर () उठाता है "टाइप एरर: प्रकार होना चाहिए, क्लासबोज नहीं" नए-स्टाइल वर्ग के लिए क्या मैं 100% चौड़ाई वाले टेक्स्ट बॉक्स को अपने कंटेनरों से परे तक फैलाने से रोक सकता हूं? अजगर की IDLE विंडो को साफ़ करने का कोई भी तरीका?

Iphone पर उद्देश्य सी में स्थिर स्ट्रिंग चर

IPhone (उद्देश्य c) में स्थैतिक स्ट्रिंग कैसे बना और एक्सेस करना? मैं क्लास ए में static NSString *str = @"OldValue" घोषित करता हूं।

अगर मैं इसे कक्षा बी में str = @"NewValue" लिए कुछ मान निर्दिष्ट करता हूं यह मान कक्षा बी में सभी तरीकों के लिए बनी रहती है। लेकिन अगर मैं इसे कक्षा सी (बी में असाइनमेंट के बाद) में प्रवेश करता हूं तो मैं इसे OldValue के रूप में प्राप्त कर रहा हूं। क्या मैं कुछ भूल रहा हूँ? क्या मुझे अन्य कक्षाओं में उपयोग करना चाहिए?

धन्यवाद और सादर, योगिनी

Solutions Collecting From Web of "Iphone पर उद्देश्य सी में स्थिर स्ट्रिंग चर"

अद्यतन: Xcode 8 के रूप में, उद्देश्य- सी में वर्ग गुण होते हैं। नोट, यह ज्यादातर वाक्यविन्यास चीनी है; ये गुण स्वत: संश्लेषित नहीं हैं, इसलिए कार्यान्वयन मूल रूप से पहले से अपरिवर्तित है।

 // MyClass.h @interface MyClass : NSObject @property( class, copy ) NSString* str; @end // MyClass.m #import "MyClass.h" @implementation MyClass static NSString* str; + (NSString*) str { return str; } + (void) setStr:(NSString*)newStr { if( str != newStr ) { str = [newStr copy]; } } @end // Client code MyClass.str = @"Some String"; NSLog( @"%@", MyClass.str ); // "Some String" 

एलएलवीएम में नया क्या है WWDC 2016 देखें। कक्षा संपत्ति का हिस्सा 5 मिनट के निशान के आसपास शुरू होता है

मूल उत्तर:

उद्देश्य-सी में वर्ग चर नहीं है, जो कि मुझे लगता है कि आप ढूंढ रहे हैं। आप इसे स्थिर चर के साथ नकली कर सकते हैं, जैसा कि आप कर रहे हैं

मैं अपने वर्ग की कार्यान्वयन फ़ाइल में स्थैतिक NSString डाल करने की सलाह देता हूं, और इसे अपवर्जित / रूपांतरित करने के लिए क्लास विधियों को प्रदान करता हूं। कुछ इस तरह:

 // MyClass.h @interface MyClass : NSObject { } + (NSString*)str; + (void)setStr:(NSString*)newStr; @end // MyClass.m #import "MyClass.h" static NSString* str; @implementation MyClass + (NSString*)str { return str; } + (void)setStr:(NSString*)newStr { if (str != newStr) { [str release]; str = [newStr copy]; } } @end 

जावा के विपरीत, जहां एक स्थिर वैरिएबल को क्लास के सभी उदाहरणों के लिए स्कॉच किया जाता है, सी में static अर्थात् एक चर केवल उस फ़ाइल के भीतर से पहुंच योग्य है जहां इसे घोषित किया गया है। यह आपको कार्य करने के लिए एक फ़ंक्शन के अंदर एक स्थिर वैरिएबल घोषित करने की अनुमति देता है, जो इस तरह से केवल पहली बार मूल्य निर्धारित करता है।

एक बात जिसका आपने उल्लेख नहीं किया है वर्ग ए, बी, और सी के बीच का संबंध है। यदि वे एक विरासत पदानुक्रम में हैं, और आप जावा में स्थिर वैरिएबल की विरासत में आने की उम्मीद कर रहे हैं, तो zpasternack द्वारा वर्णित विधि काम करेगी।

अगर तीन कक्षाएं असंबंधित होती हैं, और आप ए में घोषित मूल्य का उपयोग करना चाहते हैं, तो extern का अधिक उपयुक्त तरीका है। इस मामले में, आप चर के रूप में क्लास ए एच में एक्सट्रैक्शन घोषित करना चाहते हैं, फिर क्लास में इसे परिभाषित करें। जब तक क्लासबी और क्लास के आयात क्लास ए एच के रूप में, वे उसी प्रकार की परिभाषा के खिलाफ लिंक कर पाएंगे।

एक बढ़िया बिंदु यह है कि, अपने आप में extern का उपयोग करने के बजाय, OBJC_EXPORT का उपयोग करने के लिए अधिक मजबूत है, जो ओबीसी-एपीआईएच में परिभाषित किया गया है और सी + + के तहत भी संकलन करता है। यहां एक कोड नमूना है:

 // ClassA.h OBJC_EXPORT NSString* commonString; ... // ClassA.m NSString* commonString = @"OldValue"; // ClassB.m #import "ClassA.h" ... commonString = @"NewValue"; // Can be inside a function or method 

बेशक, बाहरी तरीके से इस तरह का उपयोग करके एक कुख्यात, बहुत-दुर्भावनापूर्ण ग्लोबल वैरिएबल बनाता है, जो उस में नाजुक है जो इसे पढ़ या लिख ​​सकता है, और पहुंच अनियंत्रित है यह सरल दृष्टिकोण है, और static वि। extern का उपयोग करने के बारे में आपके प्रश्न का उत्तर देता है। हालांकि, एक डिजाइन सिद्धांत के रूप में, क्लास के तरीकों के साथ चर को लपेटने के द्वारा प्रदान किए गए एनकैप्सुलेशन अधिक सुरक्षित है, हालांकि अधिक जटिल है ऑब्जेक्ट-ओरिएंटेड भाषाओं में, जब आप को प्राप्त करने की कोशिश कर रहे प्रभाव एक क्लास-स्टैटिक विधि का होता है, तो संभवतः जाने का सही तरीका संभव है।