objective-C文字列の比較は==ではダメ

文字列の比較。ただ単に==演算子で比較してもダメなんですね…。つまり、

NSString *hoge1 = @"piyo";
NSString *hoge2 = @"piyo";

if (hoge1 == hoge2) {
	//
} else {
	//何を試してもこっちに判定。。
}

ではダメ。いくら同じ文字列を比較してるつもりでもはじかれてしまう。ようやくたどり着いた解答がこちら。

NSString *hoge1 = @"piyo";
NSString *hoge2 = @"piyo";

if ([hoge1 isEqualToString:hoge2]) {
	//ようやくこっちに判定!!
} else {
	//
}

が正解。理由は==演算子ではポインタ値の比較となるからとのことですが、もちろん通常のオブジェクトであればこれで問題ありません。ただ、文字列に限ってはダメなんだそうで。ああ、そうだったの〜。だ~って、==演算子でも問題なかったこともあったから発見が遅れたんじゃないの〜。ブツブツ。


あとこういう表現もあるんだって。これ使えそうだな。

if ([hoge hasPrefix:@"-"]) //最初に含まれるかどうか
if ([hoge hasSuffix:@".jpg"]) //最後に含まれるかどうか


文字列比較のお作法 - memory*Leak