有時(shí)有需求讓在啟動(dòng)app之前獲取一些全局參數(shù),等拉取接口數(shù)據(jù)后再進(jìn)入app,雖然有時(shí)遇到接口慢也會(huì)慢,但產(chǎn)品就要這么需求怎么辦呢?來(lái)吧。。??催@里
用到線(xiàn)程信號(hào)量
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
此方法阻塞當(dāng)前線(xiàn)程
dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);
回調(diào)完以后調(diào)用
dispatch_semaphore_signal(semaphore);
讓當(dāng)前線(xiàn)程繼續(xù)運(yùn)行,此方法在阻塞主線(xiàn)程時(shí)子線(xiàn)程會(huì)繼續(xù)運(yùn)行,我們項(xiàng)目中一般都是用的AFN,此時(shí)你會(huì)發(fā)現(xiàn)在你用此方法在AFN回調(diào)時(shí)不走,(當(dāng)時(shí)以為是主線(xiàn)程都停止了,子線(xiàn)程就不走了,其實(shí)不是),仔細(xì)研究了下發(fā)現(xiàn),AFN的網(wǎng)絡(luò)回調(diào)是在主線(xiàn)程里,此時(shí)組線(xiàn)程阻塞了,當(dāng)然沒(méi)法回調(diào)了,將 AFN的回調(diào)隊(duì)列改成子線(xiàn)程一切OK了
synchNetManager.completionQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
時(shí)間有限,只寫(xiě)寫(xiě)方法,具體內(nèi)容,可以百度繼續(xù)研究,信號(hào)量其實(shí)是個(gè)好東西。