iOS开发 多线程GCD

- (void)testSerialDispatchQueue{

    dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.brad.gcd", NULL);

    

    dispatch_async(mySerialDispatchQueue, ^{

        for (int i =0; i<10; i++) {

            NSLog(@"queue1 th1:%d",i);

        }

    });

    dispatch_async(mySerialDispatchQueue, ^{

        for (int i =10; i<20; i++) {

            NSLog(@"queue1 th2:%d",i);

        }

    });

    

//    dispatch_release(mySerialDispatchQueue);arc!!

    

    dispatch_queue_t mySerialDispatchQueue2 = dispatch_queue_create("com.brad.gcd2", NULL);

    

    dispatch_async(mySerialDispatchQueue2, ^{

        for (int i =0; i<10; i++) {

            NSLog(@"queue2 th1:%d",i);

        }

        /*

        NSArray *arr = [[NSArray alloc]init];

        [arr objectAtIndex:2];

        * thread #4: tid = 0xafba, 0x01f5d726 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.brad.gcd2', stop reason = signal SIGABRT

         */

    });

    dispatch_async(mySerialDispatchQueue2, ^{

        for (int i =10; i<20; i++) {

            NSLog(@"queue2 th2:%d",i);

        }

    });

}


- (void)testConcurrentDispatchQueue{

  dispatch_queue_t myConcurrentQueue = dispatch_queue_create("com.brad.concurrentQueue1", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(myConcurrentQueue, ^{

        for (int i =0; i<10; i++) {

            NSLog(@"queue1 th1:%d",i);

        }

    });

    dispatch_async(myConcurrentQueue, ^{

        for (int i =10; i<20; i++) {

            NSLog(@"queue1 th2:%d",i);

        }

    });

    

}


- (void)testMainDispatchQueue{

    dispatch_queue_t mainDispatch = dispatch_get_main_queue();

    dispatch_async(mainDispatch, ^{

        UILabel *label = [[UILabel alloc]init];

        label.frame = CGRectMake(23, 23, 56, 56);

        label.backgroundColor = [UIColor redColor];

        [self.view addSubview:label];

    });

    

}


- (void)globalDispatchQueue{

    dispatch_queue_t globalDispathc = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

    dispatch_async(globalDispathc, ^{

        for (int i =0; i<10; i++) {

            NSLog(@"global queue:%d",i);

        }

        

        dispatch_queue_t mainDispatch = dispatch_get_main_queue();

        dispatch_async(mainDispatch, ^{

            UILabel *label = [[UILabel alloc]init];

            label.frame = CGRectMake(23, 23, 56, 56);

            label.backgroundColor = [UIColor redColor];

            label.text = @"globalDispathc Done";

            [self.view addSubview:label];

        });

    });

}


- (void)testSetTartgetQueue{//具体作用还不知道

    dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.brad.targetQueue", NULL);

    dispatch_queue_t globalDispatchQueueBackground = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

    

    dispatch_set_target_queue(mySerialDispatchQueue, globalDispatchQueueBackground);

}


- (void)testDispatch_after{

    NSLog(@"testDispatch_after");

    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 3ull*NSEC_PER_SEC);

    dispatch_after(time, dispatch_get_main_queue(), ^{

        NSLog(@"waited at least three seconds ");//不准确

    });

}


- (void)testDispatchGroupNotifyAndWait{

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, queue, ^{

        for (int i =0; i<10; i++) {

            NSLog(@"TA:%d",i);

        }

    });

    dispatch_group_async(group, queue, ^{

        for (int i =10; i<20; i++) {

            NSLog(@"TB:%d",i);

        }

    });

    dispatch_group_async(group, queue, ^{

        for (int i =20; i<30; i++) {

            NSLog(@"TC:%d",i);

        }

    });

//    dispatch_group_notify(group, dispatch_get_main_queue(), ^{

//        NSLog(@"done");

//    });

//    dispatch_release(queue);

    

    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);//????

    

    

//  testWaitOneSecond

    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1ull*NSEC_PER_SEC);

    long result = dispatch_group_wait(group, time);

    if (result==0) {

        NSLog(@"属于Dispatch Group的全部处理执行结束");

    }else {

        NSLog(@"属于Dispatch Group的某一个还在执行中");

    }

}


- (void)testDispatchBarrier{

    __block int i =3;

    dispatch_queue_t queue = dispatch_queue_create("com.brad.testBarrierQueue", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(queue, ^{

        NSLog(@"i:%d",i);

    });

    

    dispatch_async(queue, ^{

        i+=1;

        NSLog(@"+i:%d",i);

    });

    

    dispatch_barrier_async(queue, ^{

        i+=1;

        NSLog(@"barrier+i:%d",i);

    });

    dispatch_async(queue, ^{

        NSLog(@"end i:%d",i);

    });

    

}


- (void)testDispatchApply {

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_apply(10,queue, ^(size_t index) {

        NSLog(@"index:%zu",index);

    });

    NSLog(@"Done");

}

- (void)testDispatchApplySync{

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(queue, ^{

        dispatch_apply(10,queue, ^(size_t index) {

            NSLog(@"index:%zu",index);

        });

        

        dispatch_async(dispatch_get_main_queue(), ^{

            UILabel *label = [[UILabel alloc]init];

            label.frame = CGRectMake(23, 23, 56, 56);

            label.backgroundColor = [UIColor redColor];

            [self.view addSubview:label];

        });

        

    });

 

    NSLog(@"Done");

}


- (void)testDispatchSuspendAndResume{

    dispatch_queue_t myConcurrentQueue = dispatch_queue_create("com.brad.concurrentQueue1", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(myConcurrentQueue, ^{

        for (int i =0; i<10; i++) {

            NSLog(@"queue1 th1:%d",i);

        }

    });

    

    NSLog(@"suspend");

    dispatch_suspend(myConcurrentQueue);

    

    NSLog(@"resume");

    dispatch_resume(myConcurrentQueue);

    dispatch_async(myConcurrentQueue, ^{

        for (int i =10; i<20; i++) {

            NSLog(@"queue1 th2:%d",i);

        }

    });

}


- (void)testDispatchSemaphore {

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    NSMutableArray *arr = [[NSMutableArray alloc]initWithCapacity:0];

    for (int i = 0; i<10; i++) {

        dispatch_async(queue, ^{

            NSLog(@"index:%d",i);

            [arr addObject:[NSString stringWithFormat:@"%d",i]];

        });

    }

    

    

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1ull*NSEC_PER_SEC);

    long result = dispatch_semaphore_wait(semaphore, time);

    if (result==0) {

        NSLog(@"result:%ld",result);

    }else {

        NSLog(@"result:%ld",result);

    }

}


- (void)testDispatchSemaphore2 {

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);

    

    NSMutableArray *arr = [[NSMutableArray alloc]initWithCapacity:0];

    

    for (int i = 0; i<10; i++) {

        dispatch_async(queue, ^{

            

            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

            NSLog(@"index:%d",i);

            [arr addObject:[NSString stringWithFormat:@"%d",i]];

            dispatch_semaphore_signal(semaphore);

        });

    }

    

//    

//    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1ull*NSEC_PER_SEC);

//    long result = dispatch_semaphore_wait(semaphore, time);

//    if (result==0) {

//        NSLog(@"result:%ld",result);

//    }else {

//        NSLog(@"result:%ld",result);

//    }

}


- (void)testDispatchOnce {

    static int initialized = NO;

    if (initialized==NO) {

        NSLog(@"initialized==NO");

        initialized = YES;

    }else {

        NSLog(@"initialized==YES");

    }

    

    

    static dispatch_once_t pred;

    dispatch_once(&pred,^{

        

    });

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值