我在实现 NSOperationQueue 的应用程序中遇到问题。似乎按下 iPad 的关闭按钮会使 UI 冻结。应用程序本身仍在后台运行,UI 已更新,只是它不再响应触摸或旋转,也没有按应有的方式关闭。
我有一个更新模块,它下载相当长的 xml 文件列表并将它们保存在设备上。操作队列的 MaxConcurentOperations 值为 2。通常一切正常,应用程序运行良好且花花公子,响应我的触摸和旋转,直到我按下设备的按钮。在此之后,用户界面只是冻结。进度仍然更新(一个 UILabel),仍然显示循环动画,但应用程序不会关闭,直到所有操作完成。
我没有在队列中调用 waitUntilAllOperationsAreFinished,所以我不知道是什么原因造成的。到目前为止,我只在 iOs 5.0 的第一代 iPad 上进行了测试
如果有人能给我一些建议,我将不胜感激。如有必要,我可以发布 NSOperationQueue 和 NSOperation 类代码,但不知何故,我有这样的感觉:我错误地处理了这个问题,而不是错误的代码行
[编辑] 我还使用计时器定期检查下载状态,但我注意到不调用计时器并不能消除问题
self.timer = [NSTimer scheduleTimerWithTimeInterval:2.0 target:self 选择器:@selector(xmlDownloaded) userInfo:nil repeats:YES];
[edit2] 经过一些进一步的研究,我确保我的操作是并发的,为了确定,我改变了将操作添加到队列中的方式。代替
[下载队列添加操作:op];
我将它们添加到一个名为“操作”的可变数组中,最后我使用了
[downloadQueue addOperations:operations waitUntilFinished:NO];
但是当我按下关闭按钮时,我的应用程序仍然冻结...