我使用NSThread
从服务器端下载视频和图片。除了下载完成后我的GUI
被阻止直到下载是完成。下载完成后再花几秒钟。
这是服务器请求的完成方式:
- (void) repeatRequest{
NSLog(@"repeatRequest");
[NSThread detachNewThreadSelector:@selector(backgroundRequest) toTarget:self withObject:nil];
}
- (void) backgroundRequest{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSURL *url = [NSURL URLWithString:myURLStr];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
[pool drain];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
//do things
}
IMPORTANTAnd我也试图从ASIHTTPRequest
开始GUI thread
,但行为相同。
有什么可能出错的想法吗?
编辑:
- (void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
//internetReachable = [[Reachability reachabilityForInternetConnection] retain];
if(timer1 == nil)
{
timer1 = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector: @selector(repeatRequest) userInfo: nil repeats: YES];
}
}
答案 0 :(得分:2)
尝试在后台线程中运行同步ASIHTTPRequest,并处理不在委托方法(requestFinished)中的结果,但在[request startSynchronous]之后处理;
答案 1 :(得分:-1)
我对ASIHTTPRequest
一无所知,但我认为它的-startAsynchronous
方法已经为你处理了后台下载。这很有可能,它立即返回,你的新线程正在退出。此外,您应该在线程方法结束时使用[pool release]
而不是[pool drain]
,它会在发布时耗尽,并且您不会泄漏NSAutoReleasePool
。 ASIHTTPRequest
是否有-startSynchronous
(或只是普通-start
)方法?尝试在-backgroundRequest
内使用它,因为它应该阻止该线程的过早退出。