1

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

2 回答 2

3

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

话虽如此,操作系统在终止您的应用程序时无论如何都会释放所有内存,因此上次启动的任何内容在重新启动时“剩余”的可能性很小。除非您的服务器因为在您的应用程序终止时丢失了客户端而被阻止。在这种情况下,您必须以可以处理这种情况的方式编写服务器,因为它可能随时发生。

于 2010-03-01T14:40:25.157 回答
0

如果未调用 applicationWillTerminate 委托方法,

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

- (void)applicationWillResignActive:(UIApplication *)application
{
  NSLog(@"Application Did Resign Active");
}
于 2010-07-16T01:51:39.987 回答