在iOS4设备上在后台发送大量数据的最佳做法?

coc*_*est 22 iphone multithreading nsoperation grand-central-dispatch ios

我有一个需要将数据(使用POST)发送到服务器的应用程序.此功能必须位于其中一个NavigationController子控制器上,用户应能够远离此控制器和/或关闭应用程序(仅支持iPhone4/iOS4).我应该使用线程/ NSOperations或/并使用现有的异步方法发送数据吗?任何想法/最佳实践如何实现这一点?

coc*_*est 31

好的,我会回答我自己的问题.首先,像tc所说的那样,最好在应用程序委托上进行此调用,以便可以关闭NavigationController中的View.其次,标记后台处理的开始beginBackgroundTaskWithExpirationHandler:endBackgroundTask:以此结束:

.H:

UIBackgroundTaskIdentifier bgTask;

.M:

- (void)sendPhoto:(UIImage *)image
{
  UIApplication *app = [UIApplication sharedApplication];

  bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    [app endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid;
  }];


  NSLog(@"Sending picture...");

  // Init async NSURLConnection

  // ....
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

  NSLog(@"Picture sent.");

  UIApplication *app = [UIApplication sharedApplication];

  if (bgTask != UIBackgroundTaskInvalid) {
    [app endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid;
  }
}
Run Code Online (Sandbox Code Playgroud)

您有10分钟的iOS终止您的应用程序.你可以用这个时间来检查[app backgroundTimeRemaining]

  • 在iOS 7中3分钟 (2认同)