美文网首页
performSelector: withObject:

performSelector: withObject:

作者: NapoleonY | 来源:发表于2019-06-08 18:07 被阅读0次

    概述

    performSelector: withObject: 是 runtime 在运行时去查找方法的,编译时不做校验,因此如果找不到对应的 selector 会产生 crash,因此最好与 - (BOOL)respondsToSelector:(SEL)aSelector; 配合使用。

    与直接调用方法的区别

    直接调用方法,在编译时便可做校验,如果找不到方法,Xcode 会直接提示。

    performSelector: withObject: afterDelay:

    该方法是创建一个定时器,因此如果是在子线程,该方法对应的 selector 默认不会运行。因为子线程默认没有 RunLoop,需要 [[NSRunLoop currentRunLoop] run]; 创建并启动子线程的 RunLoop,代码如下

    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [self performSelector:@selector(delayMethod) withObject:nil afterDelay:0];
        [[NSRunLoop currentRunLoop] run];
    });
    

    备注: performSelector: withObject: afterDelay: 要放到 [[NSRunLoop currentRunLoop] run]; 的前面,否则 RunLoop 会直接退出。

    相关文章

      网友评论

          本文标题:performSelector: withObject:

          本文链接:https://www.haomeiwen.com/subject/haoixctx.html