iphone - 在 iOS4 设备上后台发送大量数据的最佳实践?

标签 iphone ios multithreading grand-central-dispatch nsoperation

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

最佳答案

好的,我会回答我自己的问题。 首先,如 tc 所说,最好在应用程序委托(delegate)上进行此调用,以便可以关闭 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;
  }
}

在 iOS 终止您的应用之前,您有 10 分钟的时间。您可以使用 [app backgroundTimeRemaining]

检查这个时间

关于iphone - 在 iOS4 设备上后台发送大量数据的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928861/

相关文章:

iphone - NSString isEqualToString 问题

iOS/GLES2 : How to programmatically determine maximum available texture units?

c - 如何检查内存是否可用于读/写操作?

ios - Xcode 颜色选择器自动更改 HSB 颜色

java - Java抛出InterruptedException后的中断状态

c++ - 在 Qt 中的信号/槽机制中返回一个无符号字符

ios - 当我在 iphone 5 屏幕上运行程序时 xcode 看起来像 iphone 4

iphone - 我什么时候开始看到付款?

iphone - 是否有一个开源框架可以简化使用音频单元的工作?

ios - 使用 Firebase 实现推送通知的最佳方式