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

- (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. 使用shared memory 计算矩阵乘法 (其实并没有加速多少)

    #include "cuda_runtime.h" #include "device_launch_parameters.h" #include "d ...

  2. 关于ECharts甘特图的实现

    对于使用ECharts图表的步骤,每种图表都是一致的,相信大家也都了解 此处只分享甘特图的option,代码如下: option: { title: { text: '项目实施进度表', left: ...

  3. epoll、mysql概念及简单操作

    epoll 程序阻塞的过程 假设我们目前运行了三个进程A B C ,如果他们都在处于运行态,那就会被加到一个运行队列中 进程A正在运行socket程序 在linux中有句话,万物皆文件,socket对 ...

  4. vue之双向绑定

    Vue的一大核心是双向绑定,在2.0中采用数据劫持,用Object.defineProperty实现,但作者已声明在3.0中会采用proxy实现   Object.defineProperty是什么? ...

  5. 最近发现了一篇讲解Vue的虚拟DOM,diff很棒的文章,特定记录转载一下

    本文章是转载的,为了方便以后复习,特地记录一下.他人请去原地址观看!!! 文章原地址:https://blog.csdn.net/m6i37jk/article/details/78140159 作者 ...

  6. Java 面向对象(一)面向对象思想

    一.面向对象思想 1.概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事 ...

  7. 在windows环境中单机搭建rabbitmq集群

    建议单机版集群仅作为学习使用,生产环境最好使用多服务器集群来避免单点故障带来的服务不可用,必竟单机版的集是伪集群. 1:准备基础文件.环境变量 设置环境变量: 变量名:RABBITMQ_BASE 变量 ...

  8. sqlAlchemy搭建sqliteOrm

    一:引入文件 from sqlalchemy import Column, Integer, VARCHAR, Text from sqlalchemy import create_engine fr ...

  9. linux服务器忘记密码操作

    当重启镜像时候 看到这个界面的时候 按1 按1之后进入如下界面 红色区域有解释 按e是编译模式,我们按e OK 这里我们选择第二行按b 进入开发者模式,然后等待启动 然后更改密码

  10. pyecharts各省人口GDP可视化分析

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/82503569 9月9日更:本篇博客数据下载:链接:http ...