在一个方法中找出调用该方法的对象?

时间:2012-01-11 20:11:19

标签: objective-c

如果我有这样的方法和类:

@implementation Animal
  -(void) move{
    id *object = [object that called move];
   }

@end

说我还有其他两个课程

@implementation C1
   ...
   [self.animal move]
   ...
@end

@implementation C2
  ...
  [self.animal move]
  ...
@end

如果不将实例'self'传递给move,他们是否可以通过移动访问self?

1 个答案:

答案 0 :(得分:3)

你不能在Objective-C中做到这一点,我建议的唯一解决方法就是在给你的课程发信息时发送发件人的参考资料,例如:

@implementation Animal
  -(void) move:(id)sender{
    id *object = [object that called move];
   }

@end

通话:

@implementation C1
   ...
   [self.animal move:self];
   ...
@end

@implementation C2
  ...
  [self.animal move:self];
  ...
@end

然后你可以使用isMemberOfClass:或isKindOfClass:来确定发送者是什么类型的对象,如果有问题的类是你发送的类或者它的子类,isKindOfClass将返回YES。而isMemberOfClass:如果您要发送消息的类是您要发送它的类的实例,则只返回YES

示例:

A * aClass; // is just A
[...]

B * bClass; // is a subclass of A
[...]

[aClass isMemberOfClass:[A class]]; // YES 
[bClass isMemberOfClass:[A class]]; // YES


[aClass isKindOfClass:[A class]]; // YES 
[bClass isKindOfClass:[A class]]; // NO