我在background.now中调用一个类似methodA的方法,如果我从methodA中调用一个名为methodB的冗长方法。我会分别提到它在后台。我问这个问题的原因是在后台调用漫长的过程线程,ui挂了一段时间。
即
[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];
}
是这种调用背景方法的方法吗?
答案 0 :(得分:1)
如果在某个线程(无论是后台线程还是主线程)上调用选择器(方法)X,则X调用的任何选择器(以传统方式)也在同一线程上。所以不,只要入口点选择器在'正确'的线程上,你就不需要为来自performSelectorInBackground:
的每个子调用调用methodA:
,它所做的任何事情也都在'正确'的线程,包括对其他方法的调用。
请注意,您在methodB中设置的NSAutoreleasePool
看起来不必要 - 您实际上并不需要它,因为您已经在NSAutoreleasePool
中设置methodA
的范围内}。 (假设methodB
仅从示例中的methodA
调用!)
很明显,您是否已让NSLogs
完全确认//some lengthy process
实际上是一直在进行的事情?