performSelector的方法[通俗易懂]

performSelector的方法[通俗易懂]在此我对performSelector系列方法进行了总结1、-(id)performSelector:(SEL)aSelector;-(id)performSelector:(SEL)aSe

大家好,又见面了,我是你们的朋友全栈君。

在此我对performSelector系列方法进行了总结

1、

– (id)performSelector:(SEL)aSelector;

– (id)performSelector:(SEL)aSelector withObject:(id)object;

– (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

这三个方法都是同步执行,与线程无关,在需要动态的去调用方法的时候去使用。

例如:

[self performSelector:@selector(configUI)]; 与[self configUI]; 效果完全相同。

withObject:(id)object 这是要传递的参数

2、

– (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray<NSString *> *)modes;

– (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

  这两个方法为异步执行,只能在主线程中执行。可用于点击UI中一个按钮会触发一个消耗性能的事件,在事件执行期间按钮会一直处于高亮状态,此时可以调用该方法去异步的处理该事件,避免上述问题。

在方法未到执行时间之前,取消方法为:

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;

调用该方法之前或在该方法所在的viewController生命周期结束的时候去调用取消函数,以确保不会引起内存泄露。

3、

– (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array;

– (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;

这两个方法,在主线程和子线程中均可执行,均会调用主线程的aSelector方法

如果设置wait为YES:等待当前线程执行完以后,主线程才会执行aSelector方法;

设置为NO:不等待当前线程执行完,就在主线程上执行aSelector方法。

如果,当前线程就是主线程,那么aSelector方法会马上执行。

注意:apple不允许程序员在主线程以外的线程中对ui进行操作,此时我们必须调用performSelectorOnMainThread函数在主线程中完成UI的更新

4、 

– (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array NS_AVAILABLE(10_5, 2_0);

– (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait NS_AVAILABLE(10_5, 2_0);

在我们指定的线程中调用方法。

5、

– (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg NS_AVAILABLE(10_5, 2_0);

后台执行

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154611.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Spring Batch示例教程

    Spring Batch示例教程SpringBatch示例教程欢迎使用SpringBatch示例。SpringBatch是一个用于执行批处理作业的弹簧框架模块。我们可以使用spring批处理来处理一系列作业。目录[隐藏]1SpringBatch示例 1.1SpringBatch示例 1.2Spring批处理示例目录结构 1.3SpringBatchMaven依赖项 …

  • 超级搜索(Super search)

    超级搜索(Super search)现在的搜索引擎会极大的帮助用户搜索到想要的搜索的内容,我们常用的搜索引擎包括百度、搜狗、360搜索等等,今天就为大家推荐一个超级搜索的插件。超级搜索基于浏览器的全面搜索。智能识别搜索关键字,集成收藏夹(书签)搜索,历史记录搜索等功能。支持自定义扩展搜索,支持打开搜索结果列表等功能。

  • PyXll-Jupyter

    PyXll-JupyterPyXll-Jupyter可以将Jupyter嵌入到excel中,可以在excel中调用python函数。

    2022年10月24日
  • vs Code 运行一个本地WEB服务器

    vs Code 运行一个本地WEB服务器vs Code 运行一个本地WEB服务器

  • windows7系统 您的账户已被停用。请向系统管理员咨询

    windows7系统 您的账户已被停用。请向系统管理员咨询问题细节描述:前几天好像是想换个用户桌面,换个用户桌面,首先把Administrator用户给禁用,然后把现在使用的用户名给删除。重启电脑,结果进不去了,显示这个错误提示:您的账户已被停用。请向系统管理员咨询解决办法:1.首先重启–(正常启动)2.按F8–(这个大家都知道-开机选项)3.选择安全模式–(注意:不是带命令的安全模式,是安全模式。F8第

    2022年10月30日

发表回复

您的电子邮箱地址不会被公开。

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