我是靠谱客的博主 难过小土豆,最近开发中收集的这篇文章主要介绍iOS 等待异步线程结束再执行后续代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天遇到一个关于蓝牙传值方法的问题,我将蓝牙通讯模块封装到了一个工具类中,另外我定义了一个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 异步请求等待传值方法小结

最后

以上就是难过小土豆为你收集整理的iOS 等待异步线程结束再执行后续代码的全部内容,希望文章能够帮你解决iOS 等待异步线程结束再执行后续代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部