以下代码执行顺序是什么 ?

- (void)action {

NSLog(@"1");

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

dispatch_async(queue, ^{

NSLog(@"3");

[self performSelector:@selector(test) withObject:nil afterDelay:0.0f];

NSLog(@"4");

});

NSLog(@"2");

}

- (void)test {

NSLog(@"5");

}

结果

2019-07-02 09:24:18.492671+0800 ModelTest[12945:510979] 1

2019-07-02 09:24:18.492776+0800 ModelTest[12945:510979] 2

2019-07-02 09:24:18.492807+0800 ModelTest[12945:511386] 3

2019-07-02 09:24:18.493009+0800 ModelTest[12945:511386] 4

test方法没有调用。因为子线程里runloop默认是关闭的。改为一下代码后

- (void)action {

NSLog(@"1");

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

dispatch_async(queue, ^{

NSLog(@"3");

[self performSelector:@selector(test) withObject:nil afterDelay:0.0f];

[[NSRunLoop currentRunLoop]run];

NSLog(@"4");

});

NSLog(@"2");

}

- (void)test {

NSLog(@"5");

}

结果

2019-07-02 09:38:40.874213+0800 ModelTest[13094:524707] 1

2019-07-02 09:38:40.874530+0800 ModelTest[13094:524707] 2

2019-07-02 09:38:40.874551+0800 ModelTest[13094:524802] 3

2019-07-02 09:38:43.792863+0800 ModelTest[13094:524802] 5

2019-07-02 09:38:43.793109+0800 ModelTest[13094:524802] 4

子线程里调用performSelector需要注意什么的更多相关文章

  1. performSelector withObject afterDelay 在子线程上调用不运行

    如题,这是最近在修改一个数据同步模块时发现的问题.整个数据同步的任务是在App启动后放在一个后台执行的线程中的,执行某个单条数据同步任务成功后,会使用 [self performSelector:(n ...

  2. android kotlin 子线程中调用界面UI组件崩溃

    UI 只能在主线程内更新,子线程需要更新UI组件时可以这样: fun fuck(){ Executors.newSingleThreadExecutor().execute{ // url reque ...

  3. WPF子线程更新UI(Dispatcher.BeginInvoke)

       在做WPF开发时,如果直接在子线程里更新UI会报错—–“调用线程无法访问此对象,因为另一个线程拥有该对象.”,这是因为WPF禁止在非UI线程里直接更新UI界面. 解决方案:   在子线程里调用D ...

  4. bug:进程可调用函数而子线程调用报错

    在调试摄像头时遇到问题:在主进程里调用下述函数能够成功,但在子线程里创建时总是失败,错误打印为 sched: RT throttling activated. UniqueObj<OutputS ...

  5. Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作

    前言:通常,我们写的公共的模块给别人用,但是这个模块又必须在特定的线程中执行. 比如,一个加载网络图片的的方法,需要在子线程中执行. /** * 加载网络图片 */ private void load ...

  6. Android子线程真的不能更新UI么

    Android单线程模型是这样描述的: Android UI操作并不是线程安全的,并且这些操作必须在UI线程执行 如果在其它线程访问UI线程,Android提供了以下的方式: Activity.run ...

  7. 关于Handler的理解,子线程不能更新UI的纠正和回调的思考

    开发Android这么久了,总会听到有人说:主线程不能访问网络,子线程不能更新UI.Android的主线程的确不能长时间阻塞,但是子线程为什么不能更新UI呢?今天把这些东西整理,顺便在子线程更新UI. ...

  8. OkHttp3几个简单的例子和在子线程更新UI线程的方法

    okHttp用于android的http请求.据说很厉害,我们来一起尝尝鲜.但是使用okHttp也会有一些小坑,后面会讲到如何掉进坑里并爬出来. 首先需要了解一点,这里说的UI线程和主线程是一回事儿. ...

  9. android 不能在子线程中更新ui的讨论和分析

    问题描写叙述 做过android开发基本都遇见过 ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是仅仅能在主线程中更改 ui.子线程要 ...

随机推荐

  1. Snort Inline IPS Mode

    Snort Inline IPS Mode https://forum.netgate.com/topic/143812/snort-package-4-0-inline-ips-mode-intro ...

  2. 冒泡(bubblesort)、选择排序、插入排序、快速排序

    冒泡排序(bubblesort) 特点:通过换位置的方式,一直向上冒泡 package main import "fmt" func bubbleSortAsc(arrayA [] ...

  3. 关于微信小程序的父子组件互相传值

    一:父组件传值给子组件 1. 在父组件中引用子组件 1.1 在父组件json中导入子组件 1.2 在子组件的json中,把自己定义为子组件 2. 在父组件中,子组件的引用处,绑定一个属性( text ...

  4. 关于vue.js的部分总结

    1.MVVM和MVC的区别: MVVM:是Model-View-ViewModel的简写,即模型-视图-视图模型 模型:后端传递的数据 试图:所看到的页面 视图模型:mvvm模式的核心,它是连接vie ...

  5. 【Distributed】分布式锁

    一.概述 1.1 分布式解决的核心思路 1.2 分布式锁一般有三种实现方式 二.基于Redis的分布式锁 2.1 使用常用命令 2.2 实现思路 2.3 核心代码 Maven依赖信息 LockRedi ...

  6. 台式机电脑u盘启动识别不到U盘设置

    U盘作为一个引导盘,在装机过程中显得十分的方便,有时候我们可以将U盘做成一个PE启动盘,有时我们也可以直接将U盘做成一个操作系统光盘的镜像. 但是有时候我们辛辛苦苦将U盘做成了引导盘了,关机---&g ...

  7. powerlink的Windows-DEMO生成笔记

    资料准备: 1.Visual studio 2010 2.Cmake 3.Powerlink 2.7.1源码 具体下载请到相关页面去获取. 新版的powerlink分为两个部分: 1.协议栈 2.应用 ...

  8. OpenCV读取图像问题:OpenCV(3.4.3) D:\Build\OpenCV\opencv-size.width0 && size.height0 in function 'cvimshow'

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/83280067 - 问题与解决 最近正在学OpenCV,发现 ...

  9. Maven 发布项目到Jetty服务器———5

    官网: http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html 1.安装配置插件 2. 运行 命令: je ...

  10. Reservoir Sampling 蓄水池采样算法

    https://blog.csdn.net/huagong_adu/article/details/7619665 https://www.jianshu.com/p/63f6cf19923d htt ...