У меня есть класс модели базы данных, который является NSObject
. У меня есть набор этих объектов в файле NSMutableArray
. Я использую indexOfObject:
, чтобы найти совпадение. Проблема заключается в изменении адреса памяти объекта модели. Поэтому я переопределяю метод hash
, чтобы вернуть идентификатор строки модели. Однако это не исправляет ситуацию. Я также должен переопределить метод isEqual:
, чтобы сравнить значение метода hash
.
Что использует метод isEqual:
для определения равенства по умолчанию?
Я предполагаю, что он использует адрес памяти. После прочтения isEqual:
Я думал, что она использует значение из метода hash
. Очевидно, это не так, поскольку моя попытка переопределить это значение не решила мою первоначальную проблему.
isEqual:
для выполнения явного сравнения указателей с==
только для того, чтобы безопасно передатьindexOfObject:
экземпляр некоторого произвольного подклассаNSObject
- вы можете быть уверены, чтоisEqual:
NSObject
выполнит сравнение указателей. - person Mark Amery   schedule 28.08.2013isEqual:
и не доверять реализацииNSObject
заходит слишком далеко. Очевидно, однако, что если равенство указателей (что проверяет реализацияNSObject
isEqual:
) на самом деле не является тем, что вам нужно, то вы должны переопределить его. - person Mark Amery   schedule 28.08.2013