2014-05-12 1 views
7

J'essaye de porter mon ancien code pour charger des fichiers de NSOperationQueue à NSURLSession. Presque tout va bien, mais je ne trouve pas comment définir la priorité pour charger différentes tâches. Est-ce que quelqu'un sait si NSURLSession supporte la priorisation du tout? Et si oui pourriez-vous me montrer comment, s'il vous plait?Priorité NSURLSession

Merci d'avance!

Rost

+1

La seule définition des priorités que j'ai vu provient de [networkServiceType] (https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSessionConfiguration_class/Reference/Reference. html # // apple_ref/occ/instp/NSURLSessionConfiguration/networkServiceType). –

+0

Je n'ai jamais vu ou entendu parler de la hiérarchisation avec NSURLSession - Je pense que vous devriez programmer taskQueue avec de courtes séries de tâches au lieu de charger tout le groupe. – Xcoder

+0

Il semble que les priorités sont par tâche, pas de session. BTW, je crois que vous pourriez utiliser HTTPMaximumConnectionsPerHost pour donner la priorité à votre session. –

Répondre

3

Je ne sais pas si cela est encore disponible dans iOS 8, mais je trouve ces lignes dans le fichier NSURLSession.h

FOUNDATION_EXPORT const float NSURLSessionTaskPriorityDefault NS_AVAILABLE(10_10, 8_0); 
FOUNDATION_EXPORT const float NSURLSessionTaskPriorityLow NS_AVAILABLE(10_10, 8_0); 
FOUNDATION_EXPORT const float NSURLSessionTaskPriorityHigh NS_AVAILABLE(10_10, 8_0); 

La note de version iOS de Apple 8.1 suggère que ces sera disponible en 8.1 si.

+1

Ils sont supposés être disponibles dans iOS 8 et versions ultérieures, mais il semble qu'il y ait un bug lors de leur utilisation dans une version optimisée. https://openradar.appspot.com/23956486 –

5

Il est une propriété NSURLSession.h

@property float priority NS_AVAILABLE(10_10, 8_0); 

Sa description dit

  • Définit un facteur d'échelle pour la priorité de la tâche. Le facteur d'échelle est une valeur comprise entre 0,0 et 1,0 (inclus), où 0,0 est considéré comme la priorité la plus faible et 1,0 est considéré comme le plus élevé.
  • La priorité est un indice et pas une exigence stricte de performance de la tâche. La priorité d'une tâche peut être modifiée à l'aide de cette API à tout moment, mais tous les protocoles ne la prennent pas en charge; dans ce cas, la dernière priorité prise en compte sera la . Si aucune priorité n'est spécifiée, la tâche fonctionnera avec la priorité par défaut
  • comme défini par la constante NSURLSessionTaskPriorityDefault. Deux niveaux de priorité supplémentaires sont fournis: NSURLSessionTaskPriorityLow et NSURLSessionTaskPriorityHigh, mais l'utilisation n'est pas limitée à ceux-ci.

Je l'utilise entre un downloadTask et dataTask qui pourraient déclencher simultanément dans notre application et le dataTask attend le téléchargement pour toujours. Mais cela résout le problème

dataTask.priority = NSURLSessionTaskPriorityHigh;