2013-09-28 2 views
6

Хорошо, так что я смотрел на примере проекта SimpleBackgroundFetch, и он использует следующее в App Делегат:NSURLSession против фона Fetch

[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:someTimeInSeconds]; 
//^this code is in didFinishLaunchingWithOptions 


-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 
    //do something + call completionHandler depending on new data/no data/fail 
} 

Таким образом, в основном я предполагаю, что я называю сервер моего приложения здесь, для получения некоторых данных.

Но потом я увидел NSURLSession docs, и он имел такие методы, как эти

– downloadTaskWithURL: 

и сказал следующее:

Этот API предоставляет богатый набор методов делегата для поддержки аутентификации и дает вашему приложению возможность выполнять фоновое скачивание , когда ваше приложение не работает, или в iOS, в то время как ваше приложение приостановлено.

В чем разница между этими двумя API? И что я должен использовать, если я хочу время от времени загружать некоторые данные с сервера приложения?

Я просто не был уверен в различии между этими двумя, поэтому я просто подумал, что мне нужно разъяснить мои сомнения. Go StackOverflow!

ответ

9

Это совершенно разные вещи.

  • фон Fetch: система запускает приложение на какое-то время (эвристика) и ваша работа заключается в запуска загрузки нового контента для пользователя.

  • NSURLSession: Замена NSURLConnection, что позволяет загрузки до продолжить после того, как приложение приостановлено.

+0

О, хорошо, спасибо за разъяснение, иногда документы могут быть громоздкими. Фраза начала/продолжения помогла мне понять это.Поэтому я предполагаю, что должен просто использовать стиль делегирования приложений/Background Fetch. Благодаря! – GangstaGraham

+0

Просто еще одна вещь. Эти два варианта не используются в сочетании. Если _content для user_ требуется небольшой запрос данных, например, некоторые обновления фидов, то нехорошо использовать _background mode_ для NSURLSession. Фоновый режим в основном предназначен для загрузки файлов, и при необходимости такие загрузки могут быть приостановлены системой. – Tricertops

+0

Спасибо за дополнительную информацию. Я ценю это. Это просто получение JSON с сервера, поэтому, как мне кажется, фоновый выбор хорош. – GangstaGraham

3

Делегат приложения предназначен для хранения обработчика завершения, чтобы вы могли его вызвать, когда ваша загрузка будет завершена.

- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler { 
    NSLog(@"Handle events for background url session"); 

    self.backgroundSessionCompletionHandler = completionHandler; 
} 

и вызывает обработчик

- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { 
    WebAppDelegate *appDelegate = (WebAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    if (appDelegate.backgroundSessionCompletionHandler) { 
     void (^completionHandler)() = appDelegate.backgroundSessionCompletionHandler; 
     appDelegate.backgroundSessionCompletionHandler = nil; 

     completionHandler(); 
    } 
    NSLog(@"All tasks are finished"); 
} 
0

Итак, вы подтверждаете, что URL-адрес, на который наделен делегат, должен быть вызван, в то время как нормальная датаграмма с блоком может не быть?

0

NSURLSession: Позволяет загрузки и скачивания в фоновом режиме и способ применения приостановить

фон Fetch: Случается, в зависимости от объема данных и длительности предыдущих передачи данных process.Only последним для 30-х годов ,

Смежные вопросы