ios跨线程通知_iOS通知和线程

本文详细探讨了iOS中通知的跨线程行为。通过实例代码展示了主线程和子线程发送通知时,接收通知的线程会保持一致。并提供了注册、发送、接收和移除通知的示例,以及相应的线程打印结果,揭示了通知在线程间同步的特性。
摘要由CSDN通过智能技术生成

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 注册通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(action:) name:@"notificationName" object:nil];

}

// 主线程发送通知

- (IBAction)actionA:(UIButton *)sender {

// 发送通知

NSNotificationCenter *center=[NSNotificationCenter defaultCenter];

[center postNotificationName:@"notificationName" object:self userInfo:@{@"key":@"notificationName"}];

NSLog(@"发送通知线程 = %@",[NSThread currentThread]);

}

// 子线程发送通知

- (IBAction)actionB:(UIButton *)sender {

dispatch_async(dispatch_get_global_queue(0, 0), ^{

// 发送通知

NSNotificationCenter *center=[NSNotificationCenter defaultCenter];

[center postNotificationName:@"notificationName" object:self userInfo:@{@"key":@"notificationName"}];

NSLog(@"发送通知线程 = %@",[NSThread currentThread]);

});

}

// 接收通知相应的方法

- (void)action:(NSNotification *)notice {

NSLog(@"接收通知线程 = %@",[NSThread currentThread]);

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"主线程更新 UI %@", [NSThread currentThread]);

});

}

// 移除通知

- (void)dealloc {

// 移除当前所有通知

NSLog(@"移除了所有的通知");

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

@end

打印结果:

当在主线程发送通知时:

发送通知线程 = {number = 1, name = main}

接收通知线程 = {number = 1, name = main}

当在子线程发送通知时:

发送通知线程 = {number = 5, name = (null)}

接收通知线程 = {number = 5, name = (null)}

结论:

通知在哪个线程发送,接收就在那个线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值