gpt4 book ai didi

iphone - 尽管在后台线程中调用冗长的方法,UI 仍会挂起

转载 作者:行者123 更新时间:2023-11-29 04:54:51 25 4
gpt4 key购买 nike

我正在后台调用类似methodA的方法。现在,如果我从methodA调用一个名为methodB的冗长方法。我是否应该单独提及它在后台。我问这个问题的原因是尽管在后台调用了冗长的过程线程,用户界面挂起一段时间。

   [self performSelectorInBackground:@selector(methodA)];


-(void)methodA
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
[self methodB];
[pool drain];
}

-(void)methodB
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
//some lengthy process

[self performSelectorOnMainThread:@selector(updateTable) withObject:nil waitUntilDone:NO];
[pool drain];
}
-(void)updateTable
{
[self.tableview reloadData];
}

这种调用后台方法的方式对吗?

最佳答案

如果在某个线程(无论是后台线程还是主线程)上调用选择器(方法)X,则 X 调用(以传统方式)的任何选择器也在同一线程上。所以不,只要入口点选择器位于“正确”的线程上,您就不需要为来自 methodA: 的每个子调用调用 performSelectorInBackground: ,然后它所做的任何事情也在“正确”的线程上,包括对其他方法的调用。

请注意,您在 methodB 中设置的 NSAutoreleasePool 看起来没有必要——您实际上并不需要它,因为您已经在 NSAutoreleasePool 设置的范围内在methodA中。 (假设 methodB 仅从 methodA 调用,如示例所示!)

顺便说一句,您是否放入了 NSLogs 来绝对验证 //some long process 实际上是一直需要花费的时间?

关于iphone - 尽管在后台线程中调用冗长的方法,UI 仍会挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8212248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com