iPhone:如何在CFRunLoop中对项目进行优先级排序(与OpenGL相关)

iPhone:如何在CFRunLoop中对项目进行优先级排序(与OpenGL相关),iphone,objective-c,opengl,user-interface,runloop,Iphone,Objective C,Opengl,User Interface,Runloop,我有一个OpenGL应用程序,它是渲染密集型的,也可以通过HTTP获取内容 按照苹果的OpenGL示例,我最初使用NSTimer作为我的主绘制循环,然后才发现(和其他人一样)这真的不是一个好主意(因为当缓慢的绘制导致绘制计时器堆积时,处理的触摸事件有时会有巨大的延迟) 因此,目前我正在使用用户godexsoft在(godexsoft搜索帖子)上给出的策略。具体而言,我的渲染运行循环位于主线程上,包含以下内容: while( CFRunLoopRunInMode(kCFRunLoopDefault

我有一个OpenGL应用程序,它是渲染密集型的,也可以通过HTTP获取内容

按照苹果的OpenGL示例,我最初使用NSTimer作为我的主绘制循环,然后才发现(和其他人一样)这真的不是一个好主意(因为当缓慢的绘制导致绘制计时器堆积时,处理的触摸事件有时会有巨大的延迟)

因此,目前我正在使用用户godexsoft在(godexsoft搜索帖子)上给出的策略。具体而言,我的渲染运行循环位于主线程上,包含以下内容:

while( CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.01f, FALSE) == 
     kCFRunLoopRunHandledSource);

该行允许在帧渲染之间发生触摸事件和与通信相关的事件。它是有效的,但我想进一步完善它。有没有办法让触摸事件优先于其他事件(比如通信相关的事情)?如果我能做到这一点,我可以减少0.01f的数字,并获得更好的帧速率。(我知道这可能意味着通信需要更长的时间才能恢复,但触摸事件不滞后是非常重要的)。

这并不能直接回答您的问题,但您是否考虑过使用它来安排重画?它是在iPhone OS 3.1中引入的。

刚刚意识到还有另一个问题。我有一个滚动表(石英)的一部分屏幕上的同时,上述计时器循环正在运行。我注意到,可滚动区域仍然是交互式的,但已经失去了“弹性”——即如果你滚动掉可见数据的末尾,它就不会以通常的动画样式“捕捉”回原位。可能与运行循环模式有关?或者苹果的UI代码使用performSelectorOnMainThread(或simil)来实现“抓拍”和弹性UI效果,我现在通过阻止主线程来阻止这种情况的发生?OP:再次补充:问题似乎是touchesEnded事件没有被发送到我的UITableView——它认为我还没有成功!滚动条仍然可见,等等。您好,是的,我听说过CADisplay链接,听起来非常方便!不幸的是,它不能应用于我正在开发的产品(需要OS3.0兼容性)。谢谢