gpt4 book ai didi

iphone - Facebook请求线程问题

转载 作者:太空狗 更新时间:2023-10-30 03:59:43 25 4
gpt4 key购买 nike

好吧,我是线程的新手,所以我有这个问题。我正在尝试从 Facebook 获取 friend 的信息,但我不想在主线程上这样做。但出于某种原因,当请求不在主线程上时,回调永远不会被调用,我不知道为什么!

我有一个数组,其中包含我 friend 的所有 ID,并循环遍历此数组并使用每个 ID 创建我的自定义类 Friend 的对象(它获取我需要的所有信息)。我将这个对象添加到一个数组中。这个 friend 对象向 Facebook 发出请求并处理响应以获取我想要的数据。

代码如下:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void) {
[self getFBFriendsInfo];
});


-(void)getFBFriendsInfo{

if (friendsInfoArray) {
[friendsInfoArray removeAllObjects];
}
else{
friendsInfoArray =[[NSMutableArray alloc]init];
}



for (int i=0; i<[UDID count]; i++) {
NSString *udid = [UDID objectAtIndex:i];
FriendsInfo *friend =[[FriendsInfo alloc] initWithFacebook:facebook andUdid:udid];
[friendsInfoArray addObject:friend];
[friend release];

}

dispatch_async(dispatch_get_main_queue(), ^(void) {
[delegate friendsInfosAvailable:friendsInfoArray];
});

在我的自定义类(class)中,我这样做:

[facebook requestWithGraphPath:udid andDelegate:self];

有了这个,回调就永远不会被调用了!仅当我在主线程上执行请求时它才有效:

dispatch_async(dispatch_get_main_queue(), ^(void) {
[facebook requestWithGraphPath:udid andDelegate:self];


});

最佳答案

这就是为什么在不同的线程上您得不到响应的原因:

Facebook 将使用 NSURLConnection 来执行请求。为了使连接正常工作,调用线程的运行循环必须在默认运行循环模式下运行(阅读 NSURLConnection 类引用)。当您使用 dispatch_async() 时,默认运行循环模式下没有运行循环运行(除非您在主调度队列中,因此在主线程上运行)。因此,我认为请求甚至没有发送(如果需要,您可以检查是否嗅探您的网络。)。

因此,简而言之,您应该在主线程上提出请求;因为它是异步的,所以它不会卡住您的应用程序。然后,如果响应的处理成本太高,则在后台处理。

我真的希望这对您有所帮助。

我最好的。

关于iphone - Facebook请求线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7228871/

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