ALAssetsLibrary performBlockAndWait(GUI挂起问题)

时间:2013-11-04 22:30:51

标签: ios alassetslibrary dispatch-async

我正在编写一个图像上传器,它会对某些事件的相机滚动编制索引,创建作业,然后将这些作业写入CoreData。另一个线程从CoreData读取以上载图像。

我一直在冻结用户界面。事件虽然GUI被冻结,但我可以看到后台队列继续完成他们的工作。当我中断(点击暂停按钮)时,我发现主线程通常看起来像这样

#0  0x38773ad4 in semaphore_wait_trap ()
#1  0x387e6b10 in _os_semaphore_wait ()
#2  0x386bf76a in _dispatch_barrier_sync_f_slow ()
#3  0x2dc50992 in -[NSManagedObjectContext performBlockAndWait:] ()
#4  0x2d5cb37e in -[ALAssetsLibrary _performBlockAndWait:] ()
#5  0x2d5d06d4 in -[ALAssetPrivate _performBlockAndWait:] ()
#6  0x2d5c4e52 in -[ALAsset defaultRepresentation] ()
#7 my code.... various methods that ar using the asset library

我已经搜索过常见的论坛,但似乎无法找到有关队列和ALAssetsLibrary的大量信息。

让我再谈谈我的代码。当他们的图像被索引(使用_processingQueue)并写入核心数据时,我有几个块(使用主队列)将数据传递给视图控制器,例如#signeded,#skipped等....因为他们被投入主队列,我没有看到问题。

由于图像是从CoreData中提取并上传的,因此有类似的方法可以移动上传进度条等....再次转换为主队列。

您认为这个问题怎么样?我访问ALAssetsLibrary的方法是在@synchonized(self)块中链接的。这一切都属于同一类。

从多个队列访问库是不对的?

0 个答案:

没有答案