在我以前的一篇文章中有人建议我使用
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]。 但通过这种方式它仍然会冻结我的应用程序几秒钟。如何在不冻结我的应用程序几秒钟的情况下执行此操作?
答案 0 :(得分:0)
这很奇怪。我不明白为什么这种方法会冻结你的UI。
一个简单的解决方案是在单独的线程中调用该方法。使读者成为一个属性(或将其传递给下面的方法):
-(void)postReaderRequest:(NSURL)url {
[self.reader postRequestWithURLState:url];
}
然后
[self performSelectorInBackground:@selector(postReaderRequest)
withObject:[NSArray arrayWithObject:url]];
如果结果相同,则必须是其他内容。
答案 1 :(得分:0)
尝试使用NSThread
执行NSURLConnection