Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一种方法可以观察在对象(iOS)上调用的每个消息调用?_Ios_Selector_Nsinvocation_Message Forwarding - Fatal编程技术网

是否有一种方法可以观察在对象(iOS)上调用的每个消息调用?

是否有一种方法可以观察在对象(iOS)上调用的每个消息调用?,ios,selector,nsinvocation,message-forwarding,Ios,Selector,Nsinvocation,Message Forwarding,我只想在每次向对象发送消息时获取选择器名称、参数、发送方或NSInvocation实例。可能的类似于forwardInvocation:,但在任何情况下(每个方法调用)。都可以通过使用objective-c消息中的隐藏参数来获取选择器的名称和目标。发件人: 当objc_msgSend找到实现方法的过程时,它 调用过程并将消息中的所有参数传递给它。信息技术 还向过程传递两个隐藏参数: 接收对象是方法的选择器 因此,在一种方法中,您可以得到以下结果: id target = getTheRe

我只想在每次向对象发送消息时获取选择器名称、参数、发送方或NSInvocation实例。可能的类似于forwardInvocation:,但在任何情况下(每个方法调用)。

都可以通过使用objective-c消息中的隐藏参数来获取选择器的名称和目标。发件人:

当objc_msgSend找到实现方法的过程时,它 调用过程并将消息中的所有参数传递给它。信息技术 还向过程传递两个隐藏参数:

接收对象是方法的选择器

因此,在一种方法中,您可以得到以下结果:

   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];