美文网首页
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