Сравнение объектов в Objective-C работает почти так же, как в Java или других объектно-ориентированных языках:
==
сравнивает ссылку на объект; в Objective-C, занимают ли они один и тот же адрес памяти.
isEqual:
, метод, определенный в NSObject , проверяет, являются ли два объекта «одинаковыми». Вы можете переопределить этот метод, чтобы обеспечить собственную проверку равенства для ваших объектов.
Так что обычно, чтобы делать то, что вы хотите, вы должны делать:
if(![myArray containsObject:anObject]) {
[myArray addObject:anObject];
}
Это работает, потому что тип массива Objective-C, NSArray , имеет метод с именем containsObject:
, который отправляет сообщение isEqual:
каждому объекту, который он содержит с вашим объектом в качестве аргумента. Он не использует ==
, если реализация isEqual:
не основана на ==
.
Если вы работаете полностью с объектами, которые вы реализуете, помните, что вы можете переопределить isEqual:
, чтобы обеспечить собственную проверку на равенство. Обычно это делается путем сравнения полей ваших объектов.