2013-06-06 16 views
7

स्टेटिक चर इस तरह सी # में घोषणा की:आईओएस - स्थैतिक चर घोषित कैसे करें?

private const string Host = "http://80dfgf7c22634nbbfb82339d46.cloudapp.net/"; 
private const string ServiceEndPoint = "DownloadService.svc/"; 
private const string ServiceBaseUrl = Host + ServiceEndPoint; 
public static readonly string RegisteredCourse = ServiceBaseUrl + "RegisteredCourses"; 
public static readonly string AvailableCourses = ServiceBaseUrl + "Courses"; 
public static readonly string Register = ServiceBaseUrl + "Register?course={0}"; 

कैसे एक और कक्षा में इस स्थिर चर कॉल करने के लिए?

+1

"स्थिर चर" उद्देश्य-सी में एक अच्छी तरह परिभाषित शब्द नहीं है और अलग-अलग अर्थ अक्सर भ्रमित होते हैं, यह स्पष्ट नहीं है कि आप यहां क्या पूछ रहे हैं। क्या आप वर्ग इंटरफ़ेस के माध्यम से एक्सेस के साथ क्लास वैरिएबल चाहते हैं? या यह स्थिर भंडारण अवधि के बारे में है? –

+0

और यहां मैं सोच रहा था कि "स्थिर चर" उद्देश्य-सी में अत्यधिक अच्छी तरह परिभाषित है, सी। – gnasher729

उत्तर

11

उत्तर:static कीवर्ड का उपयोग करें।

सिंटेक्स: static ClassName *const variableName = nil; ([जोड़ा गया const]द्वारा प्रति टिप्पणी के रूप में अद्यतन Abizern) अद्यतन के लिए


कारण ("जब तक" द्वारा टिप्पणियों के अनुसार): static जब किसी फ़ंक्शन/विधि के भीतर किसी चर पर उपयोग किया जा रहा है, तब भी उस स्थिति को संरक्षित किया जाएगा जब उस चर के दायरे को छोड़ दिया जाता है। किसी भी फ़ंक्शन/विधि के बाहर उपयोग किए जाने पर, यह उस स्रोत को अन्य स्रोत फ़ाइलों के लिए अदृश्य कर देगा - यह केवल उस कार्यान्वयन फ़ाइल के भीतर दिखाई देगा जब किसी भी फ़ंक्शन/विधि के बाहर उपयोग किया जा रहा हो। इसलिए static के साथ संकलक को तदनुसार अनुकूलित करने में मदद करता है।

यदि आपको const के उपयोग पर static के उपयोग पर अधिक स्पष्टीकरण की आवश्यकता है, तो मुझे यहां एक सुंदर लिंक मिला: const static


उपयोग:

आप अपने tableview के प्रतिनिधि में "स्थिर" कीवर्ड के उपयोग देखा हो सकता है - cellForRowAtIndexPath:

static NSString *CellIdentifier = @"reuseStaticIdentifier";

+2

में बिल्कुल वही अर्थ है, मैं 'स्थिर एनएसएसटींग * कॉन्स staticURL = @" कुछ "लिखूंगा;' – Abizern

+2

@Abizern : क्या आप मुझे 'const' के पीछे कारण बता सकते हैं? – Bhavin

+2

@Vin उस चर को रनटाइम के दौरान कभी नहीं बदला जाएगा, इसलिए एक कॉन्स कंपाइलर को तदनुसार अनुकूलित करने में मदद करता है। – Till

2

उद्देश्य सी सी की सुपर सेट है/सी ++, इसलिए स्थैतिक के लिए यह सी ++/सी सम्मेलन का पालन करता है, आप इसे

का उपयोग करने में सक्षम होना चाहिए
static <<datatype>> <<variableName>> = initialization 

आशा आप इस तरह की कोशिश की है, तो आप, किसी भी त्रुटि मिली अगर हां, अपने प्रश्न

NSString उपयोग के साथ thats मामले निम्नलिखित अगर में अधिक स्पष्टता जोड़ने कृपया है,

static NSString *pString = @"InitialValue"; 

और अगर आपको अपने कोड में NSString संशोधित करना है, तो सुनिश्चित करें कि यह NSMutableString होना चाहिए।

आशा सहायता प्रदान की गई है कि ...

+0

यदि यह एक स्थिर है तो आप इसे संशोधित क्यों करना चाहते हैं? – Abizern

+0

आपको इस पर और अधिक व्याख्या करना है: स्ट्रिंग को संशोधित करने के लिए क्योंकि यह भी मान्य है: 'myString = [NSString stringWithFormat: @ "स्ट्रिंग% जोड़ें @", myString] '; – pbibergal

+1

उद्देश्य-सी सी का एक सुपरसेट है, कोई सी ++ शामिल नहीं है। असल में' स्थिर' का अर्थशास्त्र थोड़ा अलग है सी और सी ++। –

5
static NSString *aString = @""; // Editable from within .m file 
NSString * const kAddressKey = @"address"; // Constant, visible within .m file 

// in header file 
extern NSString * const kAddressKey; // Public constant. Use this for e.g. dictionary keys. 

मेरी जानकारी सार्वजनिक स्टैटिक्स करने के लिए नहीं कर रहे हैं एक अंतर्निहित ऑब्जेक्टिव-सी की सुविधा। आप इस के चारों ओर एक सार्वजनिक वर्ग विधि है कि स्थिर चर रिटर्न बनाकर काम कर सकते हैं:

//.h 
+ (NSString *)stringVariable; 

//.m 
static NSString * aString; 
+ (NSString *)stringVariable 
{ 
    return aString; 
} 

सबसे स्थिर वस्तुओं संकलन समय पर आरंभ नहीं किया जा सकता है (मैं केवल वास्तव में तार लगता है)। यदि आपको उन्हें प्रारंभ करने की आवश्यकता है, तो आप + (void)initialize विधि में ऐसा कर सकते हैं, जिसे जब भी कक्षा का संदर्भ दिया जाता है, तो आलसी रूप से कॉल किया जाता है।

static UIFont *globalFont; 
+ (void)initialize 
{ 
    // Prevent duplicate initialize http://www.mikeash.com/pyblog/friday-qa-2009-05-22-objective-c-class-loading-and-initialization.html 
    if (self == [ClassName class]) { 
     globalFont = [UIFont systemFontOfSize:12]; 
    } 
} 
संबंधित मुद्दे