欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入探讨 performSelector:afterDelay: 使用中的潜在问题及解决方案

时间:11-15 民间故事 提交错误

本篇文章给大家谈谈深入探讨 performSelector:afterDelay: 使用中的潜在问题及解决方案,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"1");

[self PerformSelector:@selector(test) withObject:nil afterDelay:0];

NSLog(@"2");

});

}

-(无效)测试{

NSLog(@"3");

}这段代码的执行结果是1, 2

原因

因为- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay 实际上是在runloop 中,是一个定时器,但是因为子线程的原因,默认不启用runloop

以下是Apple API的注释,解释了这个问题:

image.png想要执行-(void)test方法,官方文档也提供了解决方案:

[self PerformSelectorOnMainThread:@selector(test) withObject:nil waitUntilDone:YES];其实对于上面的逻辑,比较简单的是:

[self PerformSelector:@selector(test) withObject:nil];如果没有参数,可以更简单:

[自我执行Selector:@selector(测试)];

思考

其实我们常用的执行就是头文件NSObject.h的方法;

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

可以延迟的是NSRunLoop.h下的方法;

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

前面提到的对主线程的回调是NSThread.h中的方法:

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)等待;

虽然都是NSObject的方法或者分类补充方法,但实际上它们属于不同的模块;

对比上面三个方法,后两个方法没有返回值。这实际上是基于官方的评论:

图片.png图片.png

我们许多人应该总是被上述警告所困扰。大多数人的解决方案是使用类似于以下的方法来阻止警告。这种做法虽然简单,但其实是有风险的:

#pragma clang 诊断推送

#pragma clang 诊断忽略了“-Warc-performSelector-leaks”

//代码

#pragma clang Diagnostic pop 其实除了使用IMP或者NSInitation这种比较“高端”的方法之外,更多的情况下,当方法没有返回值,或者我们不需要返回值的时候,我们可以使用:

用户评论

殃樾晨

学习iOS编程遇到难题了,这篇文章正好解决了我的困惑!

    有6位网友表示赞同!

笑傲苍穹

performSelector:afterDelay好用又容易出错,真的要好好关注这些细节啊!

    有14位网友表示赞同!

命运不堪浮华

感觉程序员还是要时刻保持谨慎,避免这类坑货!

    有12位网友表示赞同!

花海

看了标题就知道是讲一些技巧性知识了,期待深入了解!

    有20位网友表示赞同!

艺菲

学习编程确实需要注意细枝末节,这篇文章给我提了个醒!

    有10位网友表示赞同!

念旧是个瘾。

有时候就喜欢这种深入分析的文章,能让我了解更多知识!

    有12位网友表示赞同!

短发

我对iOS开发一直感兴趣,希望能从这篇阅读中有所帮助!

    有10位网友表示赞同!

发型不乱一切好办

这个 "performSelector:afterDelay:" 真的很有用,之前没怎么掌握好!

    有13位网友表示赞同!

面瘫脸

"一个坑" 就是说它容易出问题吗?赶紧来学习下避免!

    有6位网友表示赞同!

久爱不厌

文章内容肯定非常专业,我得好好看看!

    有17位网友表示赞同!

水波映月

iOS开发的知识点很多,还是要多积累经验!

    有10位网友表示赞同!

如梦初醒

这种深入思考的文章让人受益良多,期待作者继续分享!

    有14位网友表示赞同!

日久见人心

学习编程需要静心思考和总结,这次就来跟着这篇文章学点东西吧!

    有9位网友表示赞同!

长裙绿衣

希望能了解一些解决问题的技巧,改进自己的代码水平!

    有9位网友表示赞同!

容纳我ii

我一直想探索iOS开发的深度内容,这篇文正好符合我的需求!

    有20位网友表示赞同!

堕落爱人!

学习新知识的过程总是让人兴奋,准备好迎接挑战了!

    有6位网友表示赞同!

一纸愁肠。

从标题就能看出文章的重点在于分析和思考,很有实用价值!

    有19位网友表示赞同!

发呆

这篇文章肯定能帮我解决我在iOS开发过程中遇到的问题!

    有17位网友表示赞同!

红尘滚滚

多读这种注重细节的文章可以提升我的编程能力!

    有17位网友表示赞同!

空巷

学习技术需要耐心和坚持,加油!

    有5位网友表示赞同!

【深入探讨 performSelector:afterDelay: 使用中的潜在问题及解决方案】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活