Как переписать [NSRunLoop runUntilDate:] в код GCD? - PullRequest
0 голосов
/ 09 февраля 2012

Просто для любопытства я пытаюсь переписать следующий код

// 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 любыми блоками!

1 Ответ

2 голосов
/ 09 февраля 2012

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

В контексте iOS и Mac OS X основным циклом событий является цикл выполнения, и такие вещи, как модальные панели, HUD и т. Д., Спроектированы вокруг этой детали.

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

...