web-dev-qa-db-ja.com

別の文字列と比較する前に、文字列を変数に割り当てる必要がありますか?

NSStringの値を文字列 "Wrong"と比較したい。ここに私のコードがあります:

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

「間違った」ためにNSStringを本当に作成する必要がありますか?

また、ラベル値を文字列に割り当てずに、UILabeltextの値を文字列と比較できますか?

85
Bryan

「間違った」ためにNSStringを本当に作成する必要がありますか?

いいえ、なぜそうしないのですか:

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

@""を使用すると、単に文字列リテラルが作成されます。これは有効なNSStringです。

また、ラベル値を文字列に割り当てずに、UILabel.textの値を文字列と比較できますか?

はい、次のようなことができます:

UILabel *label = ...;
if([someString isEqualToString:label.text]) {
    // Do stuff here 
}
178
Alex Rozanski
if ([statusString isEqualToString:@"Wrong"]) {
    // do something
}
26
Wevah

ブライアン、ここにも投入する価値があります-もちろん、文字列変数を宣言する必要がない他の人は正しいです。ただし、次回文字列を宣言する場合は、次のことを行う必要はありません。

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

上記は機能しますが、保持されたNSString変数を提供します。NSString変数は、使用終了後に明示的に解放する必要があります。

次に文字列変数が必要な場合は、「@」記号をはるかに便利な方法で使用できます。

NSString *myString = @"SomeText";

これは、作業が完了すると自動リリースされるため、メモリリークも回避できます。

お役に立てば幸いです!

8
h4xxr

NSStringクラスのメソッドを使用して、自動解放されたインスタンスを作成し、文字列の書式設定などのオプションを追加することもできます。

NSString *myString = [NSString stringWithString:@"abc"];
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];
2
danielpunt