2012-02-09 4 views
0

Просто для моего любопытства, я пытаюсь переписать следующий кодКак переписать [NSRunLoop runUntilDate:] в код GCD?

// show HUD (with animation) 
[SVProgressHUD showWithStatus:@"loading..."]; 

// wait for HUD to safely finish showing its animation 
// (loading HUD will be visible for 1 sec) 
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]] 

// dismiss HUD 
// (dismiss HUD will be visible for 2 sec) 
[SVProgressHUD dismissWithSuccess:@"finished!" afterDelay:2]; 

в код с использованием Grand Central Dispatch.

Я попытался с помощью dispatch_source_t, dispatch_semaphore_t и dispatch_after, , но не совсем хорошо работает :(и мне нужна ваша помощь!

Пожалуйста, обратите внимание, что я не хочу, чтобы обернуть методы SVProgressHUD с любыми блоками!

ответ

2

вы действительно не можешь. Или, вы могли бы, но было бы тонна работы, что в конечном итоге просто обернуть сам NSRunLoop материала.

в контексте прошивки и Mac OS X, основные цикл событий - это цикл запуска, и такие вещи, как модальные панели, HUD и т. д., созданы это подробности.

Код, который вы показываете, представляет собой вложенный цикл . Вы эффективно запускаете основной цикл цикла в подцикле во внешнем цикле, который также поддерживается основным циклом запуска! (Если бы вы установили точку останова в методе действий, запущенном внутри вашего внутреннего цикла, вы увидите, что я имею в виду в обратном направлении).

+0

Вы имеете в виду, что main-runloop вложен в ту же самую главную-runloop ??? Похоже, мне нужно больше изучить механизм запуска цикла ... – inamiy

+0

Yup. Это именно то, что я имею в виду! Все это описано (с изображениями) в документах. – bbum

Смежные вопросы