2009-08-19 13 views
85

मैं स्ट्रिंग "गलत" के लिए NSString के मान की तुलना करना चाहता हूं।क्या इसे एक दूसरे से तुलना करने से पहले एक चर को एक स्ट्रिंग असाइन करना आवश्यक है?

NSString *wrongTxt = [[NSString alloc] initWithFormat:@"Wrong"]; 
if([statusString isEqualToString:wrongTxt]){ 
    doSomething; 
} 

मैं वास्तव में "गलत" के लिए एक NSString बनाने के लिए है: यहाँ मेरी कोड है?

इसके अलावा, क्या मैं स्ट्रिंग में लेबल मान निर्दिष्ट किए बिना UILabel के text के स्ट्रिंग में तुलना कर सकता हूं?

+0

वैसे, आप initWithFormat साथ समय बर्बाद कर रहे हैं, आप बदल सकते हैं NSString * wrongTxt = [[NSString alloc] initWithFormat: @ "गलत"]; एनएसएसटींग * गलत टेक्स्ट = @ "गलत"; यदि आप अन्य इनपुट से स्ट्रिंग की गणना करने का प्रयास करने जा रहे हैं तो केवल initWithFormat से परेशान करें। एनएसएसटींग * गलत टेक्स्ट = [[एनएसएसटींग आवंटन] initWithFormat: @ "% @ गलत% d बार था", क्रेगस्ट्रिंग, गलत गणना]; – Craig

उत्तर

178

मैं वास्तव में "गलत" के लिए एक NSString बनाने के लिए है?

नहीं है, यही कारण है कि न सिर्फ कार्य करें:

if([statusString isEqualToString:@"Wrong"]){ 
    //doSomething; 
} 

@"" का उपयोग करते हुए बस एक स्ट्रिंग शाब्दिक है, जो एक वैध NSString है बनाता है।

साथ ही, क्या मैं एक UILabel.text के मान को स्ट्रिंग में लेबल मान निर्दिष्ट किए बिना स्ट्रिंग में तुलना कर सकता हूं?

हाँ, आप की तरह कुछ कर सकते हैं:

UILabel *label = ...; 
if([someString isEqualToString:label.text]) { 
    // Do stuff here 
} 
+0

यह काम करता है। मुझे लगता है कि मेरे पास सिर्फ बग्गी कोड है। यह पहले एक अपवाद फेंक रहा था। – Bryan

+1

विस्तृत करने के लिए: label.text * आईएस * एक स्ट्रिंग है, इसलिए निश्चित रूप से आपको तुलना के लिए एक स्ट्रिंग बनाने की आवश्यकता नहीं है। – Amagrammer

26
if ([statusString isEqualToString:@"Wrong"]) { 
    // do something 
} 
+0

धन्यवाद वीवा। Perspx 1 सेकंड तेज था। – Bryan

8

ब्रायन यहाँ में फेंक लायक भी - दूसरों निश्चित रूप से कर रहे हैं सही है कि आप एक स्ट्रिंग चर घोषित करने के लिए जरूरत नहीं है। हालांकि, अगली बार जब आप एक स्ट्रिंग की घोषणा करना चाहते हैं तो आपको निम्न कार्य करने की जरूरत नहीं:

NSString *myString = [[NSString alloc] initWithFormat:@"SomeText"]; 

हालांकि उपरोक्त कार्य करता है, यह एक बनाए रखा NSString चर है जिसे आप स्पष्ट रूप से 'आप के बाद रिलीज करने के लिए की आवश्यकता होगी प्रदान करता है इसका उपयोग कर समाप्त कर दिया है।

अगली बार जब आप एक स्ट्रिंग चर आप एक अधिक सुविधाजनक तरीके से "@" प्रतीक का उपयोग कर सकते हैं:

NSString *myString = @"SomeText"; 

जब आप इसके साथ समाप्त हो गया है, ताकि आप स्मृति से बच सकेंगे यह autoreleased हो जाएगा लीक भी ...

आशा है कि मदद करता है!

+0

मैं इसके बारे में सोच रहा था।मैं अक्सर स्ट्रिंग वेरिएबल्स देखता हूं जो उद्देश्य सी ऑब्जेक्ट्स हैं, लेकिन उन्हें कभी रिलीज़ नहीं किया जाता है। धन्यवाद! – Bryan

+2

संकेत "आवंटन" बिट में है। यदि आप एलोक (या कॉपी) का उपयोग करते हैं तो आपको विशेष रूप से रिलीज़ करना होगा। यदि आप नहीं करते हैं, तो सम्मेलन यह है कि ऑब्जेक्ट पहले से ही ऑटोरेलीज पर सेट हो जाएगा। – h4xxr

+0

हां, हालांकि इसमें 'नया' या 'प्रतिलिपि' हो सकता है उदाहरण के लिए 'newObject' ('NSDictionaryController' से) या' mutableCopy' (' NSObject' से) http://developer.apple.com/documentation/Cocoa/Cceptceptual /MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1 –

2

तुम भी NSString वर्ग तरीकों जो भी एक autoreleased उदाहरण बना सकते हैं और स्ट्रिंग स्वरूपण की तरह और अधिक विकल्प होगा उपयोग कर सकते हैं:

NSString *myString = [NSString stringWithString:@"abc"]; 
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42]; 
संबंधित मुद्दे