iOS 小知识-单元测试中测试线程竞争

来源:互联网 发布:微信支付接口开发 php 编辑:程序博客网 时间:2024/06/15 07:41

之前一直在进行单元测试,遇到了多线程问题。被这个问题困扰了好久,linux和java平台都有专门的测试工具,那iOS该如何测试呢。大家都知道苹果xcode提供了thead检测工具,但是只能在模拟器下使用,有没有办法测试真机的线程竞争呢。测试了多种方法,终于找到了一种暴力测试方法,测试工程见最后附件。

1、核心代码

- (void)execMultithreadWithBlock:(void(^)())block {    for (int i = 0; i < 1000; i++) {        @autoreleasepool {            NSString *attr = [NSString stringWithFormat:@"%@",@([[NSDate date] timeIntervalSince1970])];            dispatch_queue_t cusQueue = dispatch_queue_create(attr.UTF8String, DISPATCH_QUEUE_CONCURRENT);            dispatch_async(cusQueue, ^{                if (block) {                    block();                }            });        }    }}

2、基本思路

这个方法是利用GCD创建多个并行的queue,然后执行相应的block,attr用来保证每一个queue都是唯一的。这个方法在多个真机中测试,100%出现了线程竞争的情况。

3、单元测试中使用

在demo工程中使用了经典的单例创建方式,一种是线程安全的一种是非线程安全的。对比运行结果如下图:
这里写图片描述

demo链接

0 0
原创粉丝点击