####准备

测试项目中点击ViewController界面跳转到SecondTestViewController中,再点击SecondTestViewController时返回到ViewController,并且将ViewController中一个view的背景颜色设置为红色。

####代码示例:

通知发送点在主线程中的时候接收调用的方法也在主线程执行

//发送位置 SecondTestViewController

[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_NAME object:nil userInfo:nil];

NSLog(@"当前线程 发送 %@", [NSThread currentThread]);

[self.navigationController popViewControllerAnimated:YES];

//接收位置ViewController

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:NOTIFICATION_NAME object:nil];

- (void)handleNotification:(NSNotification *)notification

{

self.changeView.backgroundColor = [UIColor redColor];

NSLog(@"当前线程 设置背景 %@", [NSThread currentThread]);

}

//输出

当前线程 设置背景 {number = 1, name = main}

当前线程 发送 {number = 1, name = main}

通知发送在global时,经测试其在同一线程

//发送点

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

NSLog(@"当前线程 发送 %@", [NSThread currentThread]);

[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_NAME object:nil userInfo:nil];

});

//接收点

self.changeView.backgroundColor = [UIColor redColor];

NSLog(@"当前线程 设置背景 %@", [NSThread currentThread]);

//输出

当前线程 发送 {number = 3, name = (null)}

当前线程 设置背景 {number = 3, name = (null)}

//同时在接收点提示警告“-[UIView setBackgroundColor:] must be used from main thread only”

我们创建一个子线程让其中发送通知

//发送

dispatch_queue_t queue = dispatch_queue_create("sss", DISPATCH_QUEUE_SERIAL);

dispatch_async(queue, ^{

NSLog(@"当前线程 发送 %@", [NSThread currentThread]);

[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_NAME object:nil userInfo:nil];

});

//接收

self.changeView.backgroundColor = [UIColor redColor];

NSLog(@"当前线程 设置背景 %@", [NSThread currentThread]);

//输出

当前线程 发送 {number = 3, name = (null)}

当前线程 设置背景 {number = 3, name = (null)}

//同时在接收点提示警告“-[UIView setBackgroundColor:] must be used from main thread only”

官方文档:在多线程的程序中,通知会在post通知时所在的线程被传达,这就导致了观察者注册通知的线程和收到通知的线程不在一个线程。

总结:通过上面的示例可以初步得出结论Notification的发送处理一般在同一线程,所以当我们在子线程发送了通知后在接收端如果涉及到UI操作的部分不要忘记返回到主线程后再进行UI操作。

如有错误,欢迎拍砖

ios跨线程通知_iOS通知线程处理 - osc_3m34anq6的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. ios 图像坐标系_iOS中理解坐标系 - Megan_zhou的个人空间 - OSCHINA - 中文开源技术交流社区...

    坐标.点和像素之间的微妙转换也可能降低绘制性能,导致线条和文字模糊.观察以下代码: CGContextSetLineWidth(context, 3.); // 绘制从坐标{10, 100}到{200 ...

  2. java通讯方式_Java线程通讯方式 - osc_63rgy8af的个人空间 - OSCHINA - 中文开源技术交流社区...

    l  休眠唤醒方式: Object的wait.notify.notifyAll Condition的await.signal.signalAll l  CountDownLatch:用于某个线程A等待 ...

  3. java线程归并排序_Java-归并排序 - FeanLau的个人空间 - OSCHINA - 中文开源技术交流社区...

    public class MergeSort { static int number=0; public static void main(String[] args) { int[] a = {26 ...

  4. java跨域cookie共享_cookie跨域共享 - qijian0503的个人空间 - OSCHINA - 中文开源技术交流社区...

    问题描述 需要解决前端pc跟服务端(java),跨域后都能获取到同一个cookie. 使用二级域名共享cookie有一个限制条件,就是两个域名的二级域名必须相同 前端pc访问域名:a.b.com 后端 ...

  5. mysql跨年统计年前年后_PHP面试总结 - osc_chmxgjn9的个人空间 - OSCHINA - 中文开源技术交流社区...

    18.一群猴子排成一圈,按1,2,-,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,如此不停 的进行下去,直到最后只剩下一只猴子为止,那只猴子 ...

  6. java线程锁为什么要唯一,java线程同步-锁 - 谁说这么长又没有中心思想还与个人技术主题无关的的标题是胡闹??? - OSCHINA - 中文开源技术交流社区...

    1.synchronized 用在方法和代码块上有什么区别呢? synchronized 用在方法签名上(以test为例),当某个线程调用此方法时,会获取该实例的对象锁,方法未结束之前,其他线程只能去 ...

  7. android新浪微博授权,新浪微博授权认证过程 - Android、iOS开发 - OSCHINA - 中文开源技术交流社区...

    一.授权认证 1.请求用户授权Token URL: https://api.weibo.com/oauth2/authorize HTTP请求方式:GET/POST 请求参数 必选 类型及范围 说明 ...

  8. 静态变量php跨页面,PHP的静态变量 - jone的个人页面 - OSCHINA - 中文开源技术交流社区...

    静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中.一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会.就是说,下次再调用这个函数的时候,该变量的值会保留下来. 只要在变量 ...

  9. ios跨线程通知_iOS 通知的多线程处理 与Runloop的关系

    一.通知的添加 通知的添加有两种常用的方式: 方式一: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selecto ...

  10. ios弧形进度条_IOS贝塞尔曲线圆形进度条和加载动画-阿里云开发者社区

    做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步 ...

最新文章

  1. 【Netty】Netty 核心组件 ( ChannelOption | EventLoopGroup )
  2. WPF中桌面屏保的制作(主要代码)
  3. leetcode 216. Combination Sum III | 216. 组合总和 III(Java)
  4. 单体应用架构——垂直应用架构———分布式架构———SOA架构———微服务架构
  5. mysql 5.5 安装配置方法图文教程
  6. 【Java】《面向对象程序设计——Java语言》Castle代码修改整理
  7. 请推荐好的工作流产品
  8. 我来做百科(第一天)
  9. 1.FreeRTOS学习笔记-入门概述
  10. 用freebsd搭建日志服务器
  11. switch更新主机服务器维护,switch更新链接不到服务器
  12. 如何搭建公司知识共享平台
  13. 操作系统OS作业整合
  14. ensp配置服务器发布(将DMZ区的web服务区发布,供client访问)
  15. ♂【超全超详细】2W字零基础小白黑客学习路线,知识体系(附学习路线图)♂
  16. 最近很火的ChatGPT和GPT4
  17. mac下安装pyinstaller
  18. 音曼Omnos 5.1全景声音响全网首评 声音惊艳
  19. 【北邮国院大三上】电子商务法(e-commerce law)知识点整理——Banking Lawe-Payment
  20. Java OpenCV-4.0.0 图像处理11 自定义图像滤波(降噪) 算子

热门文章

  1. 中英文说明书丨CalBioreagents ACTH抗原抗体对
  2. “五一”或成疫情来最火爆假期,招行信用卡天天返利助力消费
  3. 天然产物分子机制研究(内含彩蛋)——药物靶点预测系统案例分析2
  4. wincc远程服务器配置,wincc连接远程opc服务器
  5. Python获取某平台主播照片, 实现颜值检测, 进行排名
  6. azw3电子书如何用安卓手机打开?
  7. Qt雪花飘落程序,下雪
  8. Voxel RCNN:高性能3D目标检测网络(AAAI2021)
  9. 【ajax】7.请求:请求超时与网络异常处理+取消请求+请求重复发送问题
  10. 牛客练习赛30-A/C