क्या किसी दूसरे से तुलना करने से पहले उसे एक चर को सौंपना आवश्यक है?


85

मैं NSStringस्ट्रिंग के मूल्य की तुलना "गलत" से करना चाहता हूं । यहाँ मेरा कोड है:

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

क्या मुझे वास्तव में "गलत" के लिए NSString बनाना होगा?

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


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

जवाबों:


178

क्या मुझे वास्तव में "गलत" के लिए NSString बनाना होगा?

नहीं, बस क्यों नहीं:

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

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

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

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

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

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

1
विस्तार से बता दें: label.text है एक स्ट्रिंग है, तो निश्चित रूप से आप तुलना के लिए इसे से एक स्ट्रिंग बनाने की जरूरत नहीं है।
Amgrammer 12


8

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

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

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

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

NSString *myString = @"SomeText";

जब आप इसके साथ समाप्त हो जाते हैं तो यह ऑटोरेलिज्ड हो जाएगा ताकि आप मेमोरी लीक से भी बच सकें ...

उम्मीद है की वो मदद करदे!


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

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

हाँ, यह हो सकते हैं, हालांकि newया copyउदाहरण के लिए newObject(से NSDictionaryController) या mutableCopy(से NSObject) developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/...
एलेक्स Rozanski

2

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

NSString *myString = [NSString stringWithString:@"abc"];
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.