ios的notification机制是同步的还是异步的

与javascript中的事件机制不同,ios里的事件广播机制是同步的,默认情况下,广播一个通知,会阻塞后面的代码:

Objc代码  

  1. -(void) clicked
  2. {
  3. NSNotificationCenter *center =  [NSNotificationCenter defaultCenter];
  4. [center postNotificationName:@"event_happend" object:self];
  5. NSLog(@"all handler done");
  6. }

按下按钮后,发送一个广播,此前已经注册了2个此事件的侦听者

Objc代码  

  1. -(id) init
  2. {
  3. self = [super init];
  4. if(self){
  5. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(whenReceive:) name:@"event_happend" object:nil];
  6. }
  7. return self;
  8. }
  9. -(void) whenReceive:(NSNotification*) notification
  10. {
  11. NSLog(@"im1111");
  12. }

Objc代码  

  1. -(id) init
  2. {
  3. self = [super init];
  4. if(self){
  5. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(whenReceive:) name:@"event_happend" object:nil];
  6. }
  7. return self;
  8. }
  9. -(void) whenReceive:(NSNotification*) notification
  10. {
  11. NSLog(@"im22222");
  12. }

执行这段代码,首先会输出im1111,然后是im22222,最后才是all handler done。调试发现,代码始终是跑在同一个线程中(广播事件的线程),广播事件之后的代码被阻塞,直到所有的侦听者都执行完响应

所以,由于NotificationCenter的这个特性,如果希望广播的事件异步处理,则需要在侦听者的方法里开启新线程。应该把Notification作为组件间解耦的方式,而不是利用它来实现异步处理

时间: 2024-12-27 08:22:01

ios的notification机制是同步的还是异步的的相关文章

iOS的notification机制是同步的

与javascript中的事件机制不同,ios里的事件广播机制是同步的,默认情况下,广播一个通知,会阻塞后面的代码: Objc代码   -(void) clicked { NSNotificationCenter *center =  [NSNotificationCenter defaultCenter]; [center postNotificationName:@"event_happend" object:self]; NSLog(@"all handler done

iOS开发-- Notification 通知与消息机制

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆. 本文包括下面内容

ios 的通知机制

ios 的通知机制,包括通知发布,通知监听,通知移除. 1.通知发布 要发布通知前,要先创建通知对象,一个通知对象包括 通知发布者:发布通知到通知中心: 通知中心:接收通知发布者发布的通知,并转发给通知接收者. 通知接受者:接收从通知中心发布的通知. 一个通知对象要包含的内容: 1. (NSString *)name; // 通知的名称 2. (id)object; // 通知发布者 3. (NSDictionary *)userInfo; // 一些额外的信息(通知发布者传递给通知接收者的信息

iOS多线程编程:线程同步总结 NSCondtion

1:原子操作 - OSAtomic系列函数 iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件<libkern/OSBase.h>.不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的操作不会影响到其他线程内对此变量的操作,因为这些操作都是原子式的.因为原子操作只能对内置类型进行操作,所以原子操作能够同步的线程只能位于同一个进程的地址空间内. 2:锁 - NSLock系列对象 iOS平台下的锁对象为NSLock对象,进入锁通过调用lock函数,解锁调用unl

IOS 阶段学习第25天笔记(IOS沙盒机制介绍)

IOS学习(OC语言)知识点整理 一.IOS沙盒机制介绍 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访问(extension) 2)extension是ios8新开放的一种对几个固定系统区域的拓展机制,它可以在一定程度上弥补ios的沙盒机制对应用间的通信限制 3)应用沙盒一般包括以下几个文件目录: 1.应用程序包:包含所有资源文件和可执行文件 2.Documents:保存应用

ios 沙盒机制

1.IOS沙盒机制 在ios系统中,系统都为每一个app创建一个资源目录,这个目录称之为沙盒 .里面存放着图片,属性文件plist,bundle,nib文件等. 其特点如下: 1.每个应用都有属于自己的存储空间 -- 沙盒. 2.每个应用都只能访问自己的沙盒,不能访问别的沙盒 3.每个应用的文件操作必须在沙盒内,比如数据库存储,文件存储等 2.沙盒目录结构 Documents 应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 --- Caches 存储应用程序再次启动所需的信

观察者模式的具体应用——通知(notification)机制和KVO(Key-Value-Observing)机制

在Cocoa Touch框架中,观察者模式的具体应用有两个——通知(notification)机制和KVO(Key-Value-Observing)机制. 1.通知机制. 在iOS中通知主要有以下三种:广播通知.本地通知和推送通知.本文所说的通知是广播通知,广播通知除了名字和后两者相似之外其他完全不同.广播通知是Cocoa Touch框架中实现观察者模式的一种机制,它可以在一个应用内部的多个对象之间发送消息:本地通知和推送通知是给用户一种提示,比如警告对话框.发出声音.震动或者在应用图标上面显示

iOS沙盒机制

第一.什么是沙盒 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒 第二.保存内容 所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等 第三.作用 iOS沙盒为程序运行提供了很好的安全保障 第四.目录 1.Documents目录:这个目录用于存储用户数据或其它应该定期备份的信息,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录. 2.AppName.app 目录:这是

iOS的绘图机制

iOS的视图机制,提到了iOS的视图框框可以通过drawRect自己绘图,每个view的layer(CALayer)就像一个视图的投影,其实我们也可以来操作它定制一个视图,例如半透明圆角背景的视图. 要完成自己在视图上绘图,大家一定要了解一下iOS的绘图机制了.今天我试图也通俗地说一下iOS的绘图. 在iOS中绘图可以有两种方式: 1,采用iOS的核心图形库. 2,采用OpenGL ES. 这两个库的不同我简单介绍一下: 前者主要是通过核心图形库和UIKit进行封装,其更加贴近我们经常操作的视图