基本上,我的问题是这样的:
-(void)aMethod:(id)object;
理想情况下,我会像这样使用我的方法:
NSObject*theObject;
[MysteryObject aMethod:theObject];
或像这样:
[MysteryObject aMethod:NSObject];
基本上,这就是问题所在。如何区分“id”变量是否仅包含 Class 类型或指向活动对象的指针?
基本上,我的问题是这样的:
-(void)aMethod:(id)object;
理想情况下,我会像这样使用我的方法:
NSObject*theObject;
[MysteryObject aMethod:theObject];
或像这样:
[MysteryObject aMethod:NSObject];
基本上,这就是问题所在。如何区分“id”变量是否仅包含 Class 类型或指向活动对象的指针?
这应该有效:
if ([MysteryObject respondsToSelector:@selector(isSubclassOfClass:)])
NSLog(@"is a class");
else
NSLog(@"is an object");
但事实上,为了更友好的鸭子类型,您可能应该使用respondsToSelector
来检查您实际要发送的消息。
尽管使用运行时函数非常好,但我相信这是实现相同结果的一种更简单的方法:
- (void) aMethod:(id)anObject
{
if( anObject == [anObject class] ) {
// the object is a class
}
else {
// the object is an instance object
}
}