form factor_perform和performance的区别和用法

form factor_perform和performance的区别和用法performSelector:withObject:是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以这也是runtime的一种应用方式。performSelector和直接调用方法的区别就在与runtime。直接调用编译是会自动校验。如果方法不存在,那么直接调用在编译时候就能够发现,编译器会直接报错。但是使用performSelec…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

performSelector: withObject:是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以这也是runtime的一种应用方式。

1.performSelector与直接调用的区别
performSelector和直接调用方法的区别就在与runtime。直接调用编译是会自动校验。如果方法不存在,那么直接调用 在编译时候就能够发现,编译器会直接报错。
但是使用performSelector的话一定是在运行时候才能发现,如果此方法不存在就会崩溃。所以如果使用performSelector的话他就会有个最佳伴侣- (BOOL)respondsToSelector:(SEL)aSelector;来在运行时判断对象是否响应此方法。

二API

  1.与线程无关,均为同步执行,主线成子线程都可以调用
    [self performSelector:@selector(test)];
    [self performSelector:@selector(test) withObject:@"张三"];
    [self performSelector:@selector(test) withObject:@"张三" withObject:@"李四"];

    2.主线程调用
    [self performSelectorOnMainThread:@selector(test) withObject:nil waitUntilDone:NO];

3.延迟执行
/*延迟执行 延迟2秒执行test方法
   该方法内部创建了timer,然后会添加到到runloop中,所以在子线程中执行该方法时注意先执行performselector方法,然后在执行runloop run方法
     如果在子线程调用那么test方法也在子线程中执行,在主线程执行,test也是在主线程调用
    */
    [self performSelector:@selector(test) withObject:nil afterDelay:2.0f];
4.异步线程执行,不使用GCD/NSThread/NSOperation
//开启新的线程在后台执行
    [self performSelectorInBackground:@selector(test) withObject:nil];
    //指定线程执行
    [self performSelector:@selector(test) onThread:[NSThread currentThread] withObject:nil waitUntilDone:NO];

Jetbrains全家桶1年46,售后保障稳定

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207150.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号