4

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

我不断收到 UI 冻结。事件虽然 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)并写入核心数据时,我有一些块(使用主队列)将数据传递到视图控制器,例如#indexed、#skipped 等......因为它们被放入主队列,我没有看到问题。

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

您认为问题可能出在哪里?我访问 ALAssetsLibrary 的方法在 @synchonized(self) 块中。这一切都在一个类中。

从多个队列访问图书馆是错误的吗?

4

0 回答 0