什么可能导致应用程序停止正确响应接口事件?我面临的一个问题是我的应用程序停止执行各种动画,例如,键盘没有动画,它只是出现在屏幕上。设备的旋转不是动画,它只是在没有动画的情况下旋转。 UIAlertView在没有动画的情况下显示和解散。
我正在开发一个高性能的应用程序,每秒创建和释放几个对象。我尽量使用尽可能少的内存。我所描述的这个问题不是在内存警告之前,我没有捕获任何异常(我记录所有这些)。
如果有人能给我任何建议,我真的很感激。
Obs。:还有另一件我很好奇的事情:在我的应用中,当我遇到这个问题时,uiview动画就会停止发生。但CALayer动画正常执行。对此有解释吗?
答案 0 :(得分:1)
听起来好像你正在做一些阻塞主线程的操作。所有UI都在主线程上完成,因此如果你在那里进行一些长时间的计算,这将导致UI停止响应。你在做同步网址请求吗?同样,这将阻止主线程。
您应该尽可能多地将非UI代码移动到后台线程...使用GCD或NSOperations
看一下Apple的Concurrency Programming Guide。
Apple对NSThreads的看法......
* ...在所有情况下都可能无法远离线程,性能(以及代码的简单性)可以在您进行切换的地方显着改善。具体来说,使用调度队列和操作队列而不是线程有几个优点:
另外,请参阅NSThread与NSOperationQueue上的this question。
答案 1 :(得分:0)
你可能通过长时间运行来阻止主线程。您是否在代码中的某处进行轮询或循环?如果你这样做(你不应该),请确保你在后台线程上这样做。
答案 2 :(得分:0)
CALayer转换更新可以具有比主线程更高的优先级,因此即使主UI线程被阻止也可以看到。但是,只要主线程被阻止,就不会发生UI更新。在阻止主线程的过程中,UI对象将被冻结。
如果您希望UI动画流畅,您的应用必须经常从所有主线程处理返回到UI运行循环(可能每秒至少30次?)。