【发布时间】:2012-03-02 23:41:10
【问题描述】:
我正在尝试编写一个比较 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 但不适用于原语。至少我需要知道它是一个原始类型并将其转换为 id。
有什么想法吗?
【问题讨论】:
-
为什么不使用所有对象都有的
isEqual:方法(或isEqualToString:等NSString类型的相关方法)?或者,更具体地说,这种方法的目的和最终目标是什么?
标签: objective-c primitive