我正在编写一个图像上传器,它会对某些事件的相机滚动编制索引,创建作业,然后将这些作业写入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)块中链接的。这一切都属于同一类。
从多个队列访问库是不对的?