zakihayaメモ

RubyとRailsのことが中心

【Objective-C】オブジェクトの値を比較する時の注意

演算子==は変数が一致しているかどうかを判定する。
ポインタ変数の場合は、参照先ポインタの値を比較してしまう為、中身が一致していてもNOが返る。

オブジェクトの中身で比較する場合は、NSObject.isEqualを用いる。

NSString *a = [NSString stringWithString:@"AAA"];
NSString *b = [NSString stringWithFormat:@"%@", @"AAA"];

if (a == b) {
  NSLog(@"a==bで調べると aとbは同じ");
} else {
  NSLog(@"a==bで調べると aとbは違う");
}

if ([a isEqual:b]) {
  NSLog(@"[a isEqual:b]で調べると aとbは同じ");
} else {
  NSLog(@"[a isEqual:b]で調べると aとbは違う");
}

コンソール出力

a==bで調べると aとbは違う
[a isEqual:b]で調べると aとbは同じ