Я пытаюсь написать метод, который сравнивает 2 объекта. У меня проблема: как узнать, является ли свойство примитивным типом?
+(BOOL)isObject:(void*)object1 equalTo:(void*)object2
{
if (object1 == nil && object2 == nil)
return TRUE;
if ((object1 != nil && object2 == nil) ||
(object1 == nil && object2 != nil) ||
([object1 class] != [object2 class]))
return FALSE;
if (object1 != object2)
{
u_int count;
Ivar* ivars = class_copyIvarList([object1 class], &count);
for (int i=0; i < count; i++)
{
id v1 = object_getIvar(object1, ivars[i]);
id v2 = object_getIvar(object2, ivars[i]);
if (![ObjectComparer isObject:v1 equalTo:v2])
return FALSE;
}
}
return TRUE;
}
Это будет работать для объектов, но не для примитивных типов. Другое дело, что я хочу передавать параметры как что-то общее, например id, но не работает для примитивов. По крайней мере, мне нужно знать, что это примитивный тип, и преобразовать его в идентификатор.
Есть идеи?
isEqual:
(или связанные методы, такие какisEqualToString:
для типовNSString
), которые есть у всех объектов? Или, точнее, какова цель и конечная цель этого метода? - person Itai Ferber   schedule 03.03.2012