iPad上會(huì)出現(xiàn)剛登錄上賬號(hào)余素,界面就假死辛燥,iPhone6s上就不會(huì)
此時(shí)查看線程扇住,可以看到主線程是semaphore_wait_trap,如圖所示
把其他線程點(diǎn)開來看調(diào)用堆棧睁枕,也是一樣的官边,可以看到這些線程都停留在semaphore_wait_trap
除了主線程,其他線程也是停留在semaphore_wait_trap
查看到dispatch_semaphore_wait調(diào)用的地方外遇,發(fā)現(xiàn)dispatch_semaphore_wait是從系統(tǒng)默認(rèn)的global queue中調(diào)用的拒逮。模擬情況如下:
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);
for(i = 0; i < n; i++){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self doSomeThingComplete:^{
dispatch_semaphore_signal(semaphore);
}];
});
}
看起來像是dispatch_async把dispatch_semaphore_wait用dispatch_global_queue分派到所有線程,然后堵死了所有線程臀规。
具體發(fā)生情況滩援,后續(xù)更新