iOS开发 performSelector 与 cancelPreviousPerform

工作中我们可能会遇到这种场景:我们需要倒计时 10s 后去执行一个方法,再倒计时过程中,我们接到命令,要重新倒计时 10s 后去执行,直接上代码

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSomething) object:nil];
[self performSelector:@selector(doSomething) withObject:nil afterDelay:10];

解读:
我们通过 performSelector: withObject: afterDelay: 方法来延时将某个方法延时添加到队列中执行。
在延时过程中,我不需要执行该方法了,需要把它取消掉,我们可以用到
[NSObject cancelPreviousPerformRequestsWithTarget:self]; // 取消当前 run loop 里面所有未执行的延迟方法
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(方法名) object:nil]; // 指定取消 未执行的一条或者多条的延迟方法

需要注意:
performSelector 计时器导致内存泄漏
倒计时会对对象强引用,只有在倒计时结束之后,引用对象才会释放
如果提前结束倒计时,释放对象,可以使用 cancelPreviousPerformRequestsWithTarget

取消performSelector计时调用方法,参数 object 必须一致
[self performSelector:@selector(doSomething) withObject:@“test” afterDelay:10];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSomething) object:@“test”];
如果 object 不一致,无法取消 performSelector 方法:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSomething) object:nil];

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 每天坚持去做那些让你感到不舒服的,但是你觉得正确的事情,加油!
    萧橘子阅读 194评论 0赞 0
  • 成为有钱人其实并不难 一、想成为有钱人,就要学会存钱,投资,钱生钱是最快的致富捷径。 1.储蓄与投资高效并行 观点...
    逆转时机阅读 725评论 0赞 0
  • if you keep a positive attitude,you will said positive wo...
    Sahar于昔阅读 207评论 0赞 0

友情链接更多精彩内容