首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

void SendDelegateMessage(NSInvocation*):委托在等待10秒后无法返回.如何删除这种消息

根据您提供的问题,您遇到了一个关于在Objective-C中发送委托消息时出现的延迟问题。以下是一个详细的答案,以解决这个问题。

问题描述:

在Objective-C中,当您尝试发送委托消息时,有时会出现延迟。在这种情况下,委托在10秒后无法返回。

问题解决:

要解决这个问题,您可以尝试以下方法:

  1. 检查委托是否已正确设置。确保您已将委托分配给正确的对象,并且该对象实现了所需的方法。
  2. 检查委托方法的实现。确保委托方法没有错误,并且可以在合理的时间内返回结果。
  3. 检查线程和队列。确保您在正确的线程和队列上发送委托消息。如果您不确定,可以尝试在主线程上发送消息。
  4. 使用GCD(Grand Central Dispatch)来管理您的线程和队列。GCD是一个强大的工具,可以帮助您更好地管理您的代码执行。
  5. 使用断点和日志记录。使用断点和日志记录来诊断问题。您可以在委托方法的实现中设置断点,以查看是否调用了该方法。您还可以使用NSLog()函数记录消息,以查看代码的执行情况。
  6. 更新您的代码。确保您使用的是最新版本的Objective-C和苹果的SDK。有时,问题可能是由于使用过时的代码或库导致的。
  7. 查找其他可能的原因。检查您的代码中是否有其他可能导致延迟的问题,例如网络请求或其他异步操作。

总之,要解决委托在等待10秒后无法返回的问题,您需要仔细检查您的代码和设置,并使用适当的工具和技术来诊断和解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

RunTime 之消息处理与消息转发

我们知道OC中的实例对象调用一个方法称作消息传递,OC中里的消息传递采用动态绑定机制来决定具体调用哪个方法,OC的实例方法转写为C语言实际就是一个函数,但是OC并不是在编译期决定调用哪个函数,而是在运行期决定...本类方列表中查找到相应的方法实现就进行调用, (3)如果没找到,就去父类中进行查找。如果在父类中的方法列表中找到了相应方法的实现,那么就执行, 否则就执行消息处理与消息转发相关的方法。...forwardInvocation: 在这个函数里可以将NSInvocation多次转发到多个对象中,这也是这种方式灵活的地方。...该方法如果在类中不被重写的话,默认返回NO。 该方法中,我们可以为找不到实现的SEL动态的添加一个方法实现,添加完毕,就会执行我们添加的方法实现。这样,当一个类调用不存在的方法时,就不会崩溃了。...(2) 这个时候runtime会将未知消息的所有细节都封装为NSInvocation对象,然后调用下述方法: - (void)forwardInvocation: (NSInvocation*)invocation

69720

OC 消息机制及转发

为了明白这个问题怎么回事,为了避免这种错误的出现,为了当被人问起时能够说个123来,我们只能从运行时的消息机制开始说起。...不能获取NSInvocation消息相关内容。 不能操作处理参数 不能处理返回值 只是简单的返回一个对象来处理未知方法。...第三步 、给对象发送一个消息-(void)forwardInvocation:(NSInvocation *)anInvocation 开始转发处理 走到这一步,说明前面的操作都失败了。...b.然后才走到 -(void)forwardInvocation:(NSInvocation *)anInvocation 到此大致流程如下: iOS消息转发流程.png -(void)forwardInvocation...2、给对象发送消息。 执行完成,anInvocation对象 保存着执行结果、运行时系统获取结果,然后返回原始调用对象 , 完成处理。

70030
  • ios OC 消息转发机制

    一 概述      在编译期向类发送了其无法解读的的消息并不会报错,因为在运行期可以继续让类中添加方法,所有编译器在编译时还无法确知类中到底会不会有某个方法实现,当对象接收到无法解读的消息,就会启动...消息转发 机制,程序员可经由此过程告诉对象应该如何处理未知消息。...若没有“备援的接受者”,则启动完成的消息转发机制,运行期系统会把与消息有关的细节全部封装到NSInvocation对象中,让接受者最后一次设法解决当前还未处理的这条消息 2.1动态方法解析     对象接收到无法解读的消息...触发NSInvocation对象时,“消息派发系统”将会把消息指派给目标对象。...此步骤会调用下列方法来转发消息: -(void)forwardInvocation:(NSInvocation *)invocation     该方法实现简单,只需要改变调用目标,使消息新目标上得以调用即可

    44730

    ios OC 消息转发机制

    一 概述      在编译期向类发送了其无法解读的的消息并不会报错,因为在运行期可以继续让类中添加方法,所有编译器在编译时还无法确知类中到底会不会有某个方法实现,当对象接收到无法解读的消息,就会启动...消息转发 机制,程序员可经由此过程告诉对象应该如何处理未知消息。...若没有“备援的接受者”,则启动完成的消息转发机制,运行期系统会把与消息有关的细节全部封装到NSInvocation对象中,让接受者最后一次设法解决当前还未处理的这条消息 2.1动态方法解析     对象接收到无法解读的消息...触发NSInvocation对象时,“消息派发系统”将会把消息指派给目标对象。...此步骤会调用下列方法来转发消息: -(void)forwardInvocation:(NSInvocation *)invocation     该方法实现简单,只需要改变调用目标,使消息新目标上得以调用即可

    84041

    iOS进阶之消息转发机制

    当对象接收到无法解读的消息,就会启动“消息转发”机制,程序员可经此过程告诉对象应该如何处理位置消息。 ?...动态方法解析 对象收到无法解读的消息,首先将调用其所类的下列类方法: + (BOOL)resolveInstanceMethod:(SEL)selector 该方法的参数就是那个未知的选择子,...一个对象内部,可能还有一系列其他对象,该对象可经由此方法将能够处理某选择子的相关内部对象返回,这样的话,在外界看来,好像是该对象亲自处理了这些消息似的。...触发NSInvocation对象时,“消息派发系统”将亲自出马,把消息指派给目标对象。...此步骤会调用下列方法来转发消息: - (void)forwardInvocation:(NSInvocation *)anInvocation 这个方法可以实现得很简单:只需改变调用目标,使消息新目标上得以调用即可

    82260

    iOS学习巩固笔记-UIWebViewJavaScript

    发送请求之前,都会调用这个方法,如果返回NO,代表停止加载请求,返回YES,代表允许加载请求 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest...YES 表示加载该请求,返回NO 表示不加载该请求 //可以该方法中拦截请求 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest...的基本使用(任意调用对象消息方法并可以传N多参数的一个类) iOS中可以直接调用某个对象的消息方式有两种: performSelector:withObject; NSInvocation。...但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定。那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作。...NSInvocation中保存了方法所属于的对象|方法名称|参数|返回值等等 NSInvocation *invocation = [NSInvocation invocationWithMethodSignature

    1.2K70

    iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法未实现+API不兼容奔溃,模拟多继承)

    1.OC的方法与消息 我们开始使用消息机制之前,我们可以约定我们的术语。例如,很多人不清楚“方法”与“消息”是什么,但这对于理解消息传递系统如何在低级别工作至关重要。....)` 1.2 消息发送的主要步骤 消息发送的时候,C语言函数中发生了什么事情?编译器是如何找到这个方法的呢?消息发送的主要步骤如下: 首先检查这个selector是不是要忽略。...如果此方法返回的是nil 或者self,则会进入消息转发机制(- (void)forwardInvocation:(NSInvocation *)invocation),否则将会向返回的对象重新发送消息...forwardInvocation:消息发送前,runtime系统会向对象发送methodSignatureForSelector:消息,并取到返回的方法签名用于生成NSInvocation对象。...方案2的整体流程: 为即将转发的消息返回一个对应的方法签名(该签名后面用于对转发消息对象(NSInvocation *)anInvocation进行编码用) 开始消息转发((NSInvocation

    2K11

    iOS_Objective-C 消息发送(消息查找 及 消息转发)过程

    编译器看到此消息,将其转换为一条标准的C语言函数调用,所调用的函数乃是消息传递机制中的核心函数:objc_msgSend,其“原型”(prototype)如下: // 返回值类型; 参数:接受者、选择子...---- 1、动态方法解析 ​ 对象/类 接收到无法解读的消息,首先将调用下列类方法: + (BOOL)resolveInstanceMethod:(SEL)selector; // 对象无法解读...一个对象的内部,可能还有一系列其他对象,该对象可经由此方法将能够处理某选择子的相关内部对象返回,这样的话,在外界看来,就好像是该对象亲自处理了这些消息似的。举了个实现此步骤的例子如下: // 2....- (void)doesNotRecognizeSelector:(SEL)aSelector; 如果该方法返回了一个函数签名,那么系统会创建一个NSInvocation对象,把尚未处理的那条消息有关的全部细节都封于其中...然后触发如下方法,其参数就是此对象: - (void)forwardInvocation:(NSInvocation *)anInvocation; ​ 这个方法可以实现得很简单:只需改变调用目标,使消息新目标上得以调用即可

    93620

    理解消息转发机制

    第二阶段涉及“完整的消息转发机制”。如果运行期系统已经把第一阶段执行完了,那么接收者自己就无法再以动态新增方法的手段来响应包含该选择子的消息了。...一,动态方法解析   对象收到无法解读的消息,首先将调用其所属类的下列类方法: + (BOOL)resolveInstanceMethod:(SEL)selector   该方法的参数就是那个未知的选择子...一个对象内部,可能还有一系列其他对象,该对象可经由此方法将能够处理某选择子的相关内部对象返回,这样的话,在外界看来,好像是该对象亲自处理了这些消息似的。   ...此步骤会调用下列方法: (void)forwardInvocation:(NSInvocation *)invocation 实现此方法时,如果发现调用操作不应该由本类处理,则需要沿着继承体系,调用父类的同名方法...这种错误通常是因为调用了某个对象或者某个类里不存在的方法,从而触发了消息转发机制,最终把这个未识别的消息发送给了NSObject的默认实现。 三,消息转发全流程: ?

    55350

    iOS PerformSelector 遗漏问题

    其实说到对时间方面的处理项目中经常用到的是NSTimer:当一个NSTimer注册到Runloop,Runloop会重复的相应的时间点注册事件,当然Runloop为了节省资源并不会在准确的时间点触发事件...四 多参传递 performSelector如何进行多值传输?...但是这种方式并不是oc封装的方法所以使用十分的不方便。 网上的第二种方法其实也是以NSArray的形式传值,然后创建NSInvocation的方式,将参数一一绑定。...我是消息转发机制中认识的,所以这种方法类似于消息转发机制中的最后一层,多了创建NSInvocation对象的开销。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除

    48110

    理解消息转发机制

    第二阶段涉及“完整的消息转发机制”。如果运行期系统已经把第一阶段执行完了,那么接收者自己就无法再以动态新增方法的手段来响应包含该选择子的消息了。...一,动态方法解析   对象收到无法解读的消息,首先将调用其所属类的下列类方法: + (BOOL)resolveInstanceMethod:(SEL)selector   该方法的参数就是那个未知的选择子...一个对象内部,可能还有一系列其他对象,该对象可经由此方法将能够处理某选择子的相关内部对象返回,这样的话,在外界看来,好像是该对象亲自处理了这些消息似的。   ...此步骤会调用下列方法: (void)forwardInvocation:(NSInvocation *)invocation 实现此方法时,如果发现调用操作不应该由本类处理,则需要沿着继承体系,调用父类的同名方法...这种错误通常是因为调用了某个对象或者某个类里不存在的方法,从而触发了消息转发机制,最终把这个未识别的消息发送给了NSObject的默认实现。 三,消息转发全流程: ?

    85330

    《Effective Objective-C》干货三部曲(一):概念篇

    然而对象收到 消息,究竟该调用哪个方法则完全于运行期决定,甚至可以程序运行时改变,这些特性使得OC成为一门真正的动态语言。...编译器看到此消息,将其转换为一条标准的C语言函数调用,所调用的函数乃是消息传递机制中的核心函数叫做objc_msgSend,它的原型如下: void objc_msgSend(id self, SEL...实例方法- (void)forwardInvocation:(NSInvocation*)invocation:创建NSInvocation对象,将尚未处理的那条消息 有关的全部细节都封于其中,触发NSInvocation...这两种方法都是利用了isa指针获取对象所属的类,然后通过super_class类继承体系中查询。OC语言中,必须使用这种查询类型信息的方法才能完全了解对象的真实类型。...如何深拷贝? 我们需要自己编写深拷贝的方法:遍历每个元素并复制,然后将复制的所有元素重新组成一个新的集合。

    92320

    神奇的Runtime

    ,只是在编译阶段确定了要向receiver发送message这条消息,而receiver如何响应这条消息,要看运行时来决定,消息的receiver能够找到对应的selector,那么就相当于直接执行了receiver...如果有方法签名返回,runtime则根据方法签名创建描述该消息NSInvocation(NSInvocation 实际上就是对一个消息的描述,包括selector 以及参数等信息),向当前对象发送forwardInvocation...:消息,以创建的NSInvocation对象作为参数; 若methodSignatureForSelector:无方法签名返回,则向当前对象发送doesNotRecognizeSelector:消息,程序抛出异常退出...- (void)forwardInvocation:(NSInvocation *)invocation { SEL sel = invocation.selector; if([someObject...:通知观察者 4、当一个property没有观察者时,删除重写的方法 5、当没有observer观察任何一个property时,删除动态创建的子类 七、Method Swizzling原理 Objective-C

    60420

    iOS RunTime之四:消息转发

    消息发送和消息转发流程可以概括为: 消息发送是 Runtime 通过 selector 快速查找 IMP 的过程,有了函数指针就可以执行对应的方法实现; 消息转发是查找 IMP 失败执行一系列转发流程的慢速通道...)forwardInvocation:(NSInvocation *)anInvocation; 当动态方法解析不作处理返回 NO 时,消息转发机制会被触发。...其实在 forwardInvocation: 消息发送前,Runtime 系统会向对象发送 methodSignatureForSelector: 消息,并取到返回的方法签名用于生成 NSInvocation...该方法所提供是将不同的对象链接到消息链的能力。 注意: forwardInvocation: 方法只有消息接收对象中无法正常响应消息时才会被调用。...、参数的,v 代表返回值为void,@ 表示 self,: 表示 _cmd。

    74931

    iOS底层原理总结 - 探寻Runtime本质(三)

    拿上述代码举例,上述代码中实际为给person实例对象发送一条test消息消息接受者:person 消息名称:test 方法调用的过程中可以分为三个阶段。...如果消息转发也没有实现,就会报方法找不到的错误,无法识别消息,unrecognzied selector sent to instance 接下来我们通过源码探寻消息发送者三个阶段分别是如何实现的。...如果methodSignatureForSelector返回的为nil,就会来到doseNotRecognizeSelector:方法内部,程序crash提示无法识别选择器unrecognized selector...消息转发阶段流程图 NSInvocation methodSignatureForSelector方法中返回的方法签名,forwardInvocation中被包装成NSInvocation对象,NSInvocation...封装了一个方法调用,包括:方法调用者,方法,方法的参数 - (void)forwardInvocation:(NSInvocation *)anInvocation { int time

    52620

    【iOS】运行时消息传递与转发机制

    当对象接收到无法解读的消息,就会启动“消息转发(message forwarding)”机制,我们可以消息转发过程中告诉对象应该如处理未知消息消息转发分为两个阶段。...实例对象接受到无法解读的消息,首先会调用其所属类的下列类方法: + (BOOL)resolveInstanceMethod:(SEL)selector 类对象接受到无法解读的消息,那么运行期系统就会调用另外的一个方法...触发NSInvocation对象时,”消息派发系统(message-dispatch system)“将亲自触发,把消息派发给目标对象。...此步骤中会调用下面这个方法来转发消息: - (void)forwardInvocation:(NSInvocation *)invocation 消息派发系统触发消息前,会以某种方式改变消息内容,包括...这种错误通常是因为调用了某个对象或者某个类里不存在的方法,从而触发了消息转发机制,最终把这个未识别的消息发送给了NSObject的默认实现。

    8.4K50

    消息转发

    同时还有一套完整的异常消息转发机制,消息异常时,提供完整的转发链来供用户进行异常补救.几乎所有的方法调用中,我们都会确保相关方法得到了实现了,但总是会有漏网之鱼: 尝试使用字符串映射对应的方法,来进行动态调用时出现异常...,发现并未找到对应的实现,应用终止之前,就会进行消息的转发流程.OC中的消息转发机制分为以下时机: 在这部分分析中,需要具备以下知识: 方法签名 运行时动态添加/交换方法实现 动态注册新类 动态方法解析...,等待执行所需要的全部细节都得到满足之后,由消息派发系统进行触发...*)anInvocation; 第一个方法中,我们需要返回一个可用的方法签名,用来对NSInvocation进行初始化,然后第二个方法中设置处理对象进行调用.与之前的转发的处理不一样的是,在这个时机里...,而没有调用真实的实现方法.利用这个特性,我们可以将指定方法的调用直接使用_objc_msgForward进行转发,从而拦截到原始方法的实现,指定的时机(原始实现执行前,执行,或者不执行原始实现)加入自定义的实现

    1.7K20
    领券