我正在开发一个应用程序,用户在某个时候必须等待来自Web服务的正确响应。这可能需要一些时间,因为它需要来自Web服务的手动确认。因此,请求的timeoutInterval设置得非常高,以防止它过早终止。
在程序返回主屏幕后立即启动应用程序时出现问题。应用程序将无法启动(黑屏),我认为这是因为请求尚未发布并且仍在等待响应(尽管我可能错了)。
我尝试了applicationWillTerminate方法,但是在按下主页按钮时没有调用它。同样,这可能是因为应用程序仍在等待响应,但更好的解释将非常感激:)
另外,有人知道该怎么做吗?
代码:
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:urlAdress]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10000];
NSHTTPURLResponse* response = nil;
NSError* error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest
returningResponse:&response
error:&error];
答案 0 :(得分:3)
在主线程上发出同步请求将阻止整个运行循环,直到收到响应或请求超时。在此期间不会调用任何内容,包括applicationWillTerminate。这样做是一个非常糟糕的主意。您应该为请求分离一个单独的线程,或者创建一个异步NSURLConnection。
话虽这么说,操作系统会在终止你的应用程序时释放所有内存,所以在重新启动时,上次发布的任何内容几乎没有机会被“遗留”。除非您的服务器被阻止,因为它在您的应用终止时丢失了其客户端在这种情况下,您必须以能够处理这种情况的方式编写服务器,因为它可以随时发生。
答案 1 :(得分:0)
如果未调用applicationWillTerminate委托方法,
然后我想下面的委托方法会被调用。
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"Application Did Resign Active");
}