区分实例和类

时间:2012-05-09 20:35:32

标签: objective-c

基本上,我的问题是:

-(void)aMethod:(id)object;

理想情况下,我会使用我的方法:

NSObject*theObject;
[MysteryObject aMethod:theObject];

或者像这样:

[MysteryObject aMethod:NSObject];

基本上,这就是问题所在。如何区分'id'变量是仅仅包含Class类型还是指向活动对象的指针?

2 个答案:

答案 0 :(得分:2)

这应该有效:

if ([MysteryObject respondsToSelector:@selector(isSubclassOfClass:)])
    NSLog(@"is a class");
else
    NSLog(@"is an object");

但事实上,为了更加友善,你应该使用respondsToSelector检查你实际要发送的消息。

答案 1 :(得分:0)

虽然使用运行时函数非常好,但我相信这是一种更简单的方法来实现相同的结果:

- (void) aMethod:(id)anObject
{
  if( anObject == [anObject class] ) {
    // the object is a class
  }
  else {
    // the object is an instance object
  }
}