29,049
社区成员




dispatch_queue_t queue = dispatch_queue_create("gcd1", NULL);
dispatch_async(queue, ^{ //1
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
这段代码打印:---子线程---
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
这段代码打印:---主线程---
dispatch_async(dispatch_get_main_queue(), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
这段代码打印:---主线程---
dispatch_sync(dispatch_get_main_queue(), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
阻塞主线程,不打印[/quote]
非常感谢!
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
这段代码打印:---子线程---
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
这段代码打印:---主线程---
dispatch_async(dispatch_get_main_queue(), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
这段代码打印:---主线程---
dispatch_sync(dispatch_get_main_queue(), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
阻塞主线程,不打印
- (void)fun {
dispatch_queue_t queue = dispatch_queue_create("gcd1", NULL);
dispatch_sync(queue, ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
}
//执行结果:
//主线程执行fun(),log显示主
//子线程执行fun(),log显示子
谢啦。但还是没能解释:为什么log输出值和fun 在哪(同步或异步) 执行一致,而和queue无关。
dispatch_queue_t queue = dispatch_queue_create("gcd1", NULL);
dispatch_sync(queue, ^{ //1
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
在主线程中执行就打印主线程,,在子线程中就打印子线程
你可以把你这代码放到我写那段代码里面,任意位置看下打印信息。
dispatch_async(dispatch_get_main_queue(), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"---主线程---");
}else{
NSLog(@"---子线程---");
}
});
-(void) test
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
BOOL bIsMain = [NSThread isMainThread];
NSLog(@"AAA bIsMain = %d", bIsMain);
dispatch_async(dispatch_get_main_queue(), ^{
BOOL bIsMain = [NSThread isMainThread];
NSLog(@"BBB bIsMain = %d", bIsMain);
});
dispatch_queue_t queue = dispatch_queue_create("gcd1", NULL);
dispatch_sync(queue, ^{
BOOL bIsMain = [NSThread isMainThread];
NSLog(@"CCC bIsMain = %d", bIsMain);
dispatch_queue_t queue2 = dispatch_queue_create("gcd2", NULL);
dispatch_sync(queue2, ^{
BOOL bIsMain = [NSThread isMainThread];
NSLog(@"DDDD bIsMain = %d", bIsMain);
});
});
dispatch_sync(dispatch_get_global_queue(0, 0), ^{
BOOL bIsMain = [NSThread isMainThread];
NSLog(@"EEEEE bIsMain = %d", bIsMain);
dispatch_sync(dispatch_get_main_queue(), ^{
BOOL bIsMain = [NSThread isMainThread];
NSLog(@"FFFFF bIsMain = %d", bIsMain);
});
});
});
}