是否有一种方法可以观察在对象(iOS)上调用的每个消息调用?
我只想在每次向对象发送消息时获取选择器名称、参数、发送方或NSInvocation实例。可能的类似于forwardInvocation:,但在任何情况下(每个方法调用)。都可以通过使用objective-c消息中的隐藏参数来获取选择器的名称和目标。发件人: 当objc_msgSend找到实现方法的过程时,它 调用过程并将消息中的所有参数传递给它。信息技术 还向过程传递两个隐藏参数: 接收对象是方法的选择器 因此,在一种方法中,您可以得到以下结果:是否有一种方法可以观察在对象(iOS)上调用的每个消息调用?,ios,selector,nsinvocation,message-forwarding,Ios,Selector,Nsinvocation,Message Forwarding,我只想在每次向对象发送消息时获取选择器名称、参数、发送方或NSInvocation实例。可能的类似于forwardInvocation:,但在任何情况下(每个方法调用)。都可以通过使用objective-c消息中的隐藏参数来获取选择器的名称和目标。发件人: 当objc_msgSend找到实现方法的过程时,它 调用过程并将消息中的所有参数传递给它。信息技术 还向过程传递两个隐藏参数: 接收对象是方法的选择器 因此,在一种方法中,您可以得到以下结果: id target = getTheRe
id target = getTheReceiver();
SEL method = getTheMethod();
如果仍然不能满足您的需求,您可以执行以下操作:
id target = getTheReceiver();
SEL method = getTheMethod();
Helper
的类id myClassReference代码>
[self-method]
时,请创建这个助手
类的一个实例,并像调用[Helper-method]那样调用该类的方法
并添加此[helper setMyClassReference:self]代码>李>
应用程序应该崩溃,但是,只需在Helper
类上添加forwardInvocation:
。从那里,您将能够获得NSInvocation
对象。做你需要做的事情,然后:[anInvokeWithTarget:myClassReference]的职业调用
以便您可以将消息传递给原始调用者
p.S:即使这并不能回答你的问题,这个问题也需要+1。。真的让我想到了这一点。所以我上了这门课,非常有魅力
h
它并不像可能的那样严格,但是它会通知我发送给这个观察者的每个动作,然后消息被重定向到原始对象(可观察)
客户端代码只是一个保留属性
@property (nonatomic, retain) PGMessageObserver *messageObserver;
#define self_OBSERVED _messageObserver
…还有在某处的设置
self.messageObserver = [PGMessageObserver messageObserverObserving:self delegate:self];
然后,可观察到的信息应该发送给SELF_OBSERVED而不是SELF。我试图在没有实际使用助手的情况下实现一些目标,但似乎不可行。Geri,你能告诉我它的实际用途吗?:)创建给定应用程序的远程连接镜像应用程序。应该在对等设备上调用许多方法(而不知道实际的消息/任务)。
self.messageObserver = [PGMessageObserver messageObserverObserving:self delegate:self];