【问题标题】:iphone: applicationWillTerminate not called during a NSURLRequest?iphone:在 NSURLRequest 期间未调用 applicationWillTerminate?
【发布时间】:2010-03-01 14:02:04
【问题描述】:

我正在开发一个应用程序,用户在某些时候必须等待来自网络服务的正确响应。这可能需要一些时间,因为它需要来自 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]; 

【问题讨论】:

    标签: iphone release nsurlrequest


    【解决方案1】:

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

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

    【讨论】:

    • 你是对的,这样做是一件坏事:P 我不得不在服务器上重写我的代码.. 感谢您的回复 :)
    【解决方案2】:

    如果 applicationWillTerminate 委托方法没有被调用,

    那么我猜下面的委托方法会被调用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 2020-06-25
      • 2011-05-18
      • 2011-06-23
      相关资源
      最近更新 更多