热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS等待异步线程结束再执行后续代码

今天遇到一个关于蓝牙传值方法的问题,我将蓝牙通讯模块封装到了一个工具类中,另外我定义了一个Block代码块当我从外部向蓝牙发送了一个数据的时候我要用定义的block代码块返回给外部调用者。但是外

今天遇到一个关于蓝牙传值方法的问题,我将蓝牙通讯模块封装到了一个工具类中,另外我定义了一个Block代码块当我从外部向蓝牙发送了一个数据的时候我要用定义的block代码块返回给外部调用者。但是外部调用者却要在block代码块外使用这个数据。例如一个Demo代码如下:

#import "ViewController.h"

typedef void(^SuccessBlock)(NSString *Obj);

@interface ViewController ()

@property (nonatomic, weak) SuccessBlock successBlock;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

[self getADataFromOtherOperationQueue:^(NSString *Obj) {

NSLog(@"%@",Obj);

}];

NSLog(@"22222222222222222");
}

- (void)getADataFromOtherOperationQueue:(SuccessBlock)successBlock
{
self.successBlock = successBlock;

[self performSelector:@selector(setADataToOtherOperationQueue) withObject:nil afterDelay:5.0];

}

- (void)setADataToOtherOperationQueue
{
self.successBlock(@"11111111111111111");
}

打印结果总是难以避免是下面这种,哪怕我加了锁,也不行。

22222222222222222
11111111111111111

后来经过搜索发现一个方法很不错:

#import "ViewController.h"

typedef void(^SuccessBlock)(NSString *Obj);

@interface ViewController ()

@property (nonatomic, weak) SuccessBlock successBlock;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

[self getADataFromOtherOperationQueue:^(NSString *Obj) {

//这里改变RunLoop模式
CFRunLoopStop(CFRunLoopGetMain());

NSLog(@"%@",Obj);
}];

//这里恢复RunLoop
CFRunLoopRun();


NSLog(@"22222222222222222");
}

- (void)getADataFromOtherOperationQueue:(SuccessBlock)successBlock
{
self.successBlock = successBlock;

[self performSelector:@selector(setADataToOtherOperationQueue) withObject:nil afterDelay:5.0];

}

- (void)setADataToOtherOperationQueue
{
self.successBlock(@"11111111111111111");
}

打印结果:

11111111111111111
22222222222222222

我的问题瞬间就解决了,very good!!!

另外非常感谢大神的分享
原文链接: iOS 异步请求等待传值方法小结


推荐阅读
author-avatar
路边一烧饼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有