首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当以增量方式读取UIDocument时,将哪个线程用于performAsynchronousFileAccessUsingBlock

当以增量方式读取UIDocument时,将哪个线程用于performAsynchronousFileAccessUsingBlock
EN

Stack Overflow用户
提问于 2020-07-02 08:59:35
回答 1查看 123关注 0票数 0

我增量地读取UIDocument,并使用它的performAsynchronousFileAccessUsingBlock来促进这一点。因为我在主线程上打开文档,所以我会注意在主线程上也调用这个方法,但这是必要的吗?

所以我的问题是-在哪个线程上调用performAsynchronousFileAccessUsingBlock有关系吗?

EN

回答 1

Stack Overflow用户

发布于 2020-07-03 18:03:48

不,这不重要。

谢谢Ol Sen -你说的每一句话都让我认为答案是“不”,这无关紧要,但我仍然不是100%确信,所以让我用下面的代码快速测试一下。如果它无关紧要,那么它应该运行,如果它真的运行,那么它应该在某个地方引发异常。(这样做的目的是同时从主线程和后台线程重复调用)。

代码语言:javascript
运行
复制
    // 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消息,但对于这一次显然是太小心了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62687411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档