Ios UIPickerView didSelectRow事件延迟或完全删除

Ios UIPickerView didSelectRow事件延迟或完全删除,ios,opengl-es,event-handling,uipickerview,Ios,Opengl Es,Event Handling,Uipickerview,我有一个例子,UIPickerView didSelectRow消息只在长时间延迟后发送。在某些情况下,它们根本不会被发送 上下文:我的应用程序正在做一些繁重的、动画化的计算和渲染工作,当用户旋转轮子选择某个东西时。你可以转动轮子,它看起来工作正常;但是,当选择一行时,didSelectRow消息需要几秒钟才能到达我的代理。有时,我的代表从未收到任何消息 显然,这与计算负载有关。不过,我不明白的是,为什么信息不能在帧之间偷偷传递。这些消息不是在某处排队吗 如果它们没有排队,有没有办法在帧之间轮询

我有一个例子,UIPickerView didSelectRow消息只在长时间延迟后发送。在某些情况下,它们根本不会被发送

上下文:我的应用程序正在做一些繁重的、动画化的计算和渲染工作,当用户旋转轮子选择某个东西时。你可以转动轮子,它看起来工作正常;但是,当选择一行时,didSelectRow消息需要几秒钟才能到达我的代理。有时,我的代表从未收到任何消息

显然,这与计算负载有关。不过,我不明白的是,为什么信息不能在帧之间偷偷传递。这些消息不是在某处排队吗


如果它们没有排队,有没有办法在帧之间轮询选择器?

我假设是通过OpenGL ES从标记在主线程上执行的密集渲染?如果不是,但它仍然会阻塞您的UI元素,您可能会遇到此问题中描述的问题:。我在回答中提到了我使用的一个解决方案,这样做的时候触摸事件似乎被保留了下来;或者,至少,我的代码不是故意启动其他线程。我认为我的问题恰恰相反:渲染的帧速率没有改变——只是选择器被卡住了。你的问题是UI元素更新延迟了渲染更新,除非我误读了它。。。你知道如何实现轮询吗?这可能是最简单的事情…如果你的OpenGL ES渲染都在主线程上,它会扰乱你的UI元素刷新。这就是为什么我建议在后台串行GCD队列上进行OpenGL ES渲染。它以两种方式工作,允许平滑的UI更新以及不间断的计算和渲染,根据我的经验,我建议您使用它。通过这样做,你还会看到多核iOS设备的整体性能有了巨大的提升。是的,我越想它,就越意识到应用程序应该是多线程的,原因有很多。什么是GCD?GCD: