- (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,^{
});
}