在方法中找出调用该方法的对象?
问题描述:
如果我有这样的方法和类:在方法中找出调用该方法的对象?
@implementation Animal
-(void) move{
id *object = [object that called move];
}
@end
说,我有两个其他类
@implementation C1
...
[self.animal move]
...
@end
@implementation C2
...
[self.animal move]
...
@end
,而没有经过实例“自我”为举措,是他们的一些方式来获得访问自我移动?
答
你不能在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
有没有像在语言 - 哪些问题是你想解决? – 2012-01-11 20:13:20
[如何找出谁称为方法?](http://*.com/questions/1793999/how-to-find-out-whocalled-a-method)[如何找出谁是调用者?](http://*.com/questions/1373991/)和一个很好的答案来自[查找从哪里调用方法](http://*.com/questions/1614208/finding -where-A-方法-被称为-从)。 – 2012-01-11 20:16:13
传递'发件人'是达到此目的的常见习惯用语。例如,考虑一个按钮。您将为该按钮添加一个处理程序,并且在对该按钮执行操作时,它会调用将自己作为发件人传递的处理程序。 – Jeremy 2012-01-11 20:19:41