Pragmatic ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

NSDictionaryのKeyにカスタムクラスを使う方法

NSDictionaryのKeyに自作のクラスを使う場合は以下の3つの実装が必要。



- (id)copyWithZone:(NSZone*) zone

- (BOOL)isEqual:(id)object

- (NSUInteger)hash



copyWithZoneはKeyはコピーされてNSDictionaryに保存されるため、インスタンスのクローン処理を実装する必要がある。
hashとisEqualはobjectForKeyでNSDictionaryからValueを取得時に使われる。

まずhashが用いられ、その後isEqualが呼ばれる。
実装はhashはインスタンスごとに一意なhash値を返すことと、isEqualはインスタンスが同じかどうかの判定を行う。