是否存在“处理消息”的功能,即更新屏幕,响应累积的用户输入

时间:2011-02-28 12:11:41

标签: objective-c ios control-flow

我在我的应用程序中遇到了一个奇怪的错误,我正在尝试使用步执行来调试它。

然而,似乎iphone上的东西通常不会像我想的那样同步发生,例如当我跨过这条线时         [self.view addSubview:FinndomoEmbeddedMWView.view]; 模拟器中没有任何反应。 如果我只让程序运行,则会添加视图并且屏幕会按原样更改。

所以我猜,addSubview没有做与添加视图相关的所有事情,它只是启动过程,然后在稍后完成。

我不知道ios similair上是否有消息队列到winapi,但必须有类似的东西,所以有“处理所有累积消息”的功能。然后我想在我的addSubview之后调用这个函数,并且在调试时实际看到模拟器中的内容发生了变化,而不是在程序运行时。

我不仅对addSubview有经验,所以我想为这样的事情提供一般解决方案。

2 个答案:

答案 0 :(得分:1)

昨天星期六,找到了答案:

NSDate *dtr = [[NSDate alloc] initWithTimeIntervalSinceNow:0.5];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:dtr];

这是那种我想要的东西。如您所见,如果没有更多事件,此特定代码可能最终等待0.5秒,如果有待处理的事件,则仅处理第一个事件然后返回(根据文档)。

但是当然可以避免这种情况,这只是一个例子,如果有人想要同样的事情。在我的情况下,只有一个重要的事件,所以提供的代码段工作。

答案 1 :(得分:0)

简短的回答是否定的。

Cocoa是事件驱动的。

每个应用程序的核心是事件循环。在每次通过事件循环时,应用程序处理添加到事件队列的事件。更新屏幕就是这样一个事件。

因此,在您的代码返回之后,在下一次通过事件循环时,不会对屏幕显示进行更改。

出于调试目的,你想要逐行弄清楚发生了什么,你需要使用调试器的工具,或者在你的代码中添加NSLog语句。