Objective c iPad应用程序在NSOperationQueue期间冻结

Objective c iPad应用程序在NSOperationQueue期间冻结,objective-c,ios,nsoperationqueue,Objective C,Ios,Nsoperationqueue,我在应用程序中实现了NSOperationQueue时遇到问题。 似乎按下iPad的关闭按钮会使UI冻结。应用程序本身仍在后台运行,用户界面也在更新,只是它不再响应触摸或旋转,也不再像应该的那样关闭 我有一个更新模块,可以下载相当长的xml文件列表并将它们保存在设备上。操作队列的MaxConcurrentOperations值为2。 通常一切正常,应用程序运行良好,对我的触摸和旋转做出响应,直到我按下设备按钮。在这之后,UI就会冻结。进度仍在更新(UILabel),循环动画仍在显示,但在所有操作

我在应用程序中实现了NSOperationQueue时遇到问题。 似乎按下iPad的关闭按钮会使UI冻结。应用程序本身仍在后台运行,用户界面也在更新,只是它不再响应触摸或旋转,也不再像应该的那样关闭

我有一个更新模块,可以下载相当长的xml文件列表并将它们保存在设备上。操作队列的MaxConcurrentOperations值为2。 通常一切正常,应用程序运行良好,对我的触摸和旋转做出响应,直到我按下设备按钮。在这之后,UI就会冻结。进度仍在更新(UILabel),循环动画仍在显示,但在所有操作完成之前,应用程序不会关闭

我不会在队列上调用WaitUntlallOperations,所以我不知道是什么导致了这一情况。。到目前为止,我只在第一代iOs 5.0 iPad上做过测试

如果有人能给我一些建议,我将非常感激。如果有必要,我可以发布NSOperationQueue和NSOperation类代码,但不知何故,我感觉我处理错误了,而不是错误的代码行

[编辑] 我还使用计时器定期检查下载状态,但我注意到不调用计时器并不能消除问题

self.timer=[NSTimer scheduledTimerWithTimeInterval:2.0目标:自选择器:@selector(xmlDownloaded)userInfo:nil repeats:YES]

[编辑二] 经过进一步的研究,我确保了我的操作是并发的,为了确保这一点,我改变了将操作添加到队列的方式。 而不是

[下载队列添加操作:op]

我将它们添加到一个名为“operations”的可变数组中,最后使用

[下载队列添加操作:操作等待完成:否]


但当我按下关闭按钮时,我的应用程序仍然冻结…

胡乱猜测,您正在锁定主线程,等待操作完成/您正在破坏
视图上的操作委托将消失?

似乎是另一个函数导致了这一点,尽管我不明白为什么

我有一个标签动画

cabasicanition*fadey=[cabasicanition animationWithKeyPath:@“不透明”]

[fadey setToValue:[NSNumber numberWithFloat:0.35f]

fadey.repeatCount=巨大的值

[fadey setAutoreverses:是]

[法迪设定持续时间:0.6f]

这个小功能导致应用程序等待所有操作完成后才能关闭应用程序。奇怪的是,该函数甚至没有在NSO操作中被调用,而是在NSO操作之前被调用
再一次,我不知道为什么。。。当我按下关闭按钮时,所有东西都会断开,否则就没有问题了。因此,如果其他人遇到类似的问题,检查是否有重复的动画可能会有所帮助

否,我所做的唯一类似的事情是取消dealloc(setSuspended/cancelAllOperations/release)中的队列,并在internet连接断开时将其挂起。此外,我的操作没有委托人