3

基本上,我的问题是这样的:

-(void)aMethod:(id)object;

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

NSObject*theObject;
[MysteryObject aMethod:theObject];

或像这样:

[MysteryObject aMethod:NSObject];

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

4

2 回答 2

2

这应该有效:

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

但事实上,为了更友好的鸭子类型,您可能应该使用respondsToSelector来检查您实际要发送的消息。

于 2012-05-09T20:47:20.453 回答
0

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

- (void) aMethod:(id)anObject
{
  if( anObject == [anObject class] ) {
    // the object is a class
  }
  else {
    // the object is an instance object
  }
}
于 2013-07-08T02:42:51.533 回答