我增量地读取UIDocument,并使用它的performAsynchronousFileAccessUsingBlock来促进这一点。因为我在主线程上打开文档,所以我会注意在主线程上也调用这个方法,但这是必要的吗?
所以我的问题是-在哪个线程上调用performAsynchronousFileAccessUsingBlock有关系吗?
发布于 2020-07-03 18:03:48
不,这不重要。
谢谢Ol Sen -你说的每一句话都让我认为答案是“不”,这无关紧要,但我仍然不是100%确信,所以让我用下面的代码快速测试一下。如果它无关紧要,那么它应该运行,如果它真的运行,那么它应该在某个地方引发异常。(这样做的目的是同时从主线程和后台线程重复调用)。
// Schedule on queue
for ( int i = 0; i < 100; i ++ )
{
[self.ctl.queue addOperation:[NSBlockOperation blockOperationWithBlock: ^ {
[self.doc performAsynchronousFileAccessUsingBlock: ^ {
NSLog(@"Queue %d main %@",i,NSThread.isMainThread ? @"YES" : @"NO" );
}];
}]];
}
// Schedule on main
for ( int i = 0; i < 10; i ++ )
{
[self.doc performAsynchronousFileAccessUsingBlock: ^ {
NSLog(@"Main %d main %@",i,NSThread.isMainThread ? @"YES" : @"NO" );
}];
}结果-它运行时没有任何问题,所以现在我说服了自己,答案是不,这无关紧要。显然,您可以从任何线程并发调用此函数。
这是在主线程上调用的,self.doc是某个任意打开的UIDocument,而self.ctl.queue是一个后台队列。
我知道文档说通常使用主线程来执行这些操作(打开、保存、关闭),但我曾经因为没有遵守这一点而陷入麻烦,所以我一直小心翼翼地只在主线程上发送UIDocument消息,但对于这一次显然是太小心了。
https://stackoverflow.com/questions/62687411
复制相似问题