0

只是出于我的好奇,我正在尝试重写以下代码

// 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 的方法!

4

1 回答 1

2

你真的不能。或者,你可以,但这将是大量的工作,最终只会包装这些NSRunLoop东西本身。

在 iOS 和 Mac OS X 的上下文中,主事件循环是一个运行循环,诸如模式面板、HUD 之类的东西都是围绕这个细节设计的。

您显示的代码是一个嵌套的运行循环。您实际上是在由主运行循环维护的外循环内的子循环中运行主运行循环!(如果您要在内部循环中触发的操作方法上设置断点,您会在回溯中看到我的意思)。

于 2012-02-09T04:22:09.957 回答