在与人们讨论之后,她将大家的问题总结为三类:安全机制会制造额外的隔阂;组织中的人很难理解 DevOps,...
dispatch_async(dispatch_get_main_queue(), block);\ } 对比两段代码可以发现前者有两个地方改变了,一是多了#ifndef,二是判断条件改变了。 显然,增加#ifndef是为了提高代码的严谨,防止重复定义dispatch_main_async_safe。 关于判断条件的改变的原因则是复杂得多了,具体可以阅读GCD's Main Queue vs. Main Thread。
#ifndef dispatch_main_async_safe #define dispatch_main_async_safe(block)\ if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {\ block();\ } else {\ dispatch_async(dispatch_get_main_queue(), block);\ } #endi...
主队列标签为: com.apple.main-thread//如果在主线程内调用dispatch_async(dispatch_get_main_queue(), block),可能会导致block在下一次runloop执行,从而导致更新UI时出错,而且还浪费资源.//所以如果在主线成,直接执行了.不在才回归.#ifndefdispatch_main_async_safe//#if not define#definedispatch_main_async_sa...
- (void)viewDidLoad { dispatch_async(dispatch_get_main_queue(), ^{ [self asdasd]; }); dispatch_queue_t queue = dispatch_queue_create("asd", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ [self asdasdasd]; }); dispatch_main_async_safe(^{ NSLog(@"666666"); }); NSLog(@"...