日々精進

新しく学んだことを書き留めていきます

NSArrayのcontainsObject

containsObjectはNSArrayの要素のisEqualメソッドを使って同じオブジェクトかどうかを判定しているので、例えばNSNumberオブジェクトが要素の場合は正しく判定できない。具体的には以下のように想定と違う動作になる。

NSArray *ary = @[@1];
[ary containsObject:@1]; // #=>NOを返す

これはNSNumberのisEqualがポインタ比較をしているため。同じ値かどうかはisEqualNumberで判定する。
NSNumberが要素の場合は自分でcontainsObjectを実装しないといけない。
独自のオブジェクトをcontainsObjectで判別できるようにする。 - 絶品ゆどうふのタレ