iphone:在NSURLRequest期间没有调用applicationWillTerminate?

时间:2010-03-01 14:02:05

标签: iphone release nsurlrequest

我正在开发一个应用程序,用户在某个时候必须等待来自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]; 

2 个答案:

答案 0 :(得分:3)

在主线程上发出同步请求将阻止整个运行循环,直到收到响应或请求超时。在此期间不会调用任何内容,包括applicationWillTerminate。这样做是一个非常糟糕的主意。您应该为请求分离一个单独的线程,或者创建一个异步NSURLConnection。

话虽这么说,操作系统会在终止你的应用程序时释放所有内存,所以在重新启动时,上次发布的任何内容几乎没有机会被“遗留”。除非您的服务器被阻止,因为它在您的应用终止时丢失了其客户端在这种情况下,您必须以能够处理这种情况的方式编写服务器,因为它可以随时发生。

答案 1 :(得分:0)

如果未调用applicationWillTerminate委托方法,

然后我想下面的委托方法会被调用。

- (void)applicationWillResignActive:(UIApplication *)application
{
  NSLog(@"Application Did Resign Active");
}