如何使用NSURLConnection在后台建立连接

时间:2011-12-13 21:39:01

标签: iphone objective-c nsurlconnection nsthread

在我以前的一篇文章中有人建议我使用

NSURLConnection *conn = [NSURLConnection connectionWithRequest:theRequest delegate:self];

在新线程中建立连接以保持GUI在连接期间不冻结。 但现在我可以意识到这不起作用。

这是整个方法。

- (void)postRequestWithURLState:(NSString *)url
{
    NSString *bodyRequest = nil;
    NSURL *requestURL = [NSURL URLWithString:url];
    NSMutableURLRequest *theRequest = [[NSMutableURLRequest alloc] init];

    //NSLog(@"-------------- bodyRequest: %@", bodyRequest);



    [theRequest setURL:requestURL];
    [theRequest setTimeoutInterval:2.0];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody:[bodyRequest dataUsingEncoding:NSASCIIStringEncoding]];
    [self.oauthAuthentication authorizeRequest:theRequest];
    NSURLConnection *conn = [NSURLConnection connectionWithRequest:theRequest delegate:self];

    self.web = conn;


}

这是一个名为greader的类的一部分。所以我在这种模式下使用这种方法。

   reader = [[greader alloc] init];
   [reader setDelegate:self];

比我称之为[reader postRequestWithURLState:url]。 但通过这种方式它仍然会冻结我的应用程序几秒钟。如何在不冻结我的应用程序几秒钟的情况下执行此操作?

2 个答案:

答案 0 :(得分:0)

这很奇怪。我不明白为什么这种方法会冻结你的UI。

一个简单的解决方案是在单独的线程中调用该方法。使读者成为一个属性(或将其传递给下面的方法):

-(void)postReaderRequest:(NSURL)url {
   [self.reader postRequestWithURLState:url];
}

然后

[self performSelectorInBackground:@selector(postReaderRequest) 
   withObject:[NSArray arrayWithObject:url]];

如果结果相同,则必须是其他内容。

答案 1 :(得分:0)

尝试使用NSThread执行NSURLConnection