美文网首页
iOS开发 performSelector 与 cancelPr

iOS开发 performSelector 与 cancelPr

作者: LearningCoding | 来源:发表于2018-03-12 19:11 被阅读32次

工作中我们可能会遇到这种场景:我们需要倒计时 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];

相关文章

网友评论

      本文标题:iOS开发 performSelector 与 cancelPr

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