gpt4 book ai didi

ios - 在多线程中等待返回

转载 作者:行者123 更新时间:2023-11-28 22:06:05 25 4
gpt4 key购买 nike

我得到了包含 Twitter API 工作方法的类。我知道我应该使用线程来处理 Internet。但是我在这部分编程方面有点陌生。所以我决定这就足够了。

-(NSArray*) getTweets:(NSString *)query {
[self performSelectorOnMainThread:@selector(anotherMethod:) withObject:query waitUntilDone:YES];
return [self tweets];
}

这就是我在 main 方法中调用它的方式:

NSString* query = @"query";
id<TwitterGetter> obj = [[className alloc] init];
NSArray* array = [obj getTweets:query];

但在此之后 NSArray* 为 nil。我应该怎么做才能避免这个问题?我尝试阅读 apple 的指南,但看起来我没看懂。

最佳答案

要了解到底发生了什么,我们需要更多的代码,知道您在哪个线程上调用它...无论如何,最好尝试一些回调过程。在你的情况下 anotherMethod: 应该使用你的数组参数在主线程上调用一些回调方法。

例如这应该是一个很好的方法:

- (void)buttonPressed:(id)sender {
//start some spinner or continue with application
//even some locking mechanism might be needed so this method is not called multiple times
[self getTweets:@"whatever"];
}
- (void)getTweets:(NSString *)query {
[self performSelectorInBackground:@selector(anotherMethod:) withObject:query];
}
- (void)anotherMethod:(NSString *)query {
//get tweets
NSArray *tweets;
[self performSelectorOnMainThread:@selector(gotTweets:) withObject:tweets waitUntilDone:NO];
}
- (void)gotTweets:(NSArray *)tweets {
//stop the spiner if needed
//unlock if needed
//do whatever with your data
}

关于同步:

您应该始终避免在主线程上进行加载和等待。如果您需要屏幕暂停,请尝试添加一些叠加层(通常具有一些低 alpha)并可能添加一个 UIActivityIndi​​catorView 以便用户可以看到正在进行的某些加载并阻止用户交互,因此他无法继续进行应用程序。请注意,如果您阻塞主线程的时间过长,您的应用程序将被终止(称为看门狗),这是您应该在单独的线程上执行所有加载和请求的主要原因。好吧,除了用户可能认为应用程序卡住并可能终止它的原因。

关于ios - 在多线程中等待返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928305/

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