2009-09-08 8 views
1

Est-ce que quelqu'un est au courant d'un moyen de recevoir les méthodes de délégué de NSURLDownload sur un fil séparé, c'est-à-dire pas le principal? J'utilise une NSOperationQueue pour les gérer mais pour l'instant j'ai besoin d'utiliser la méthode performSelectorOnMainThread pour l'obtenir aussi. Le problème avec ceci est qu'il rend fou la tâche du noyau atteignant environ 30% des cycles du processeur. Curieusement ce ne est arrivé depuis la mise à niveau à SL, lorsque le comportement a changé NSOperationQueue (pas que je suis dissing il, roches GCD!)NSURLDécharger des méthodes de délégué sur un thread séparé

Merci Colin

Répondre

0

NSOperationQueue a changé le comportement parce qu'il était bogué. Il semble vraiment solide maintenant mais oui, il a une personnalité différente. Référence (http://www.mikeash.com/?page=pyblog/dont-use-nsoperationqueue.html)

Pouvez-vous donner plus d'informations sur votre problème? Avez-vous seulement besoin d'aviser lorsque le téléchargement est terminé? Faites-vous beaucoup de téléchargements à la fois?

+0

Je l'ai fait quelques recherches et mon application qui reposait sur la mise en œuvre précédente de NSOperationQueue a changé pour qu'il soutienne à la fois (je l'espère). Mais cela ne change pas la surcharge du CPU. Il horloges encore environ 30%. Cela ne change pas si j'ai 1 téléchargement ou 30 ... Et oui, je dois être informé en permanence des mises à jour. Cette utilisation du processeur disparaît lorsque je ne spécifie pas de délégué pour le téléchargement. –

+0

L'utilisation est élevée même si le délégué ne fait rien? –

+0

Oui, il ne semble pas y avoir de différence s'il y a beaucoup de traitement en cours dans les routines de rappel ou rien du tout. –

2

Ma première question est, qu'est-ce que vous utilisez NSURLDownload faire? Êtes-vous en train de télécharger un tas de fichiers sur le disque, ou voulez-vous vraiment les données en mémoire?

  • Si vous téléchargez un tas de fichiers sur le disque et vous ne voulez pas faire de traitement spécial, je voudrais tout d'abord essayer juste tirer hors de tous les NSURLDownloads sur le thread principal, sans prendre la peine avec une NSOperationQueue ... Je veux dire, de combien d'opérations parlons-nous? Peuvent-ils tous fonctionner simultanément? Les rappels sur le thread principal ne devraient pas poser trop de problèmes, à moins que vous ne fassiez quelque chose de lourd quand vous recevez des informations, auquel cas il semble que ...

  • Sinon passez à l'utilisation de NSURLConnection. Il est spécifiquement documenté pour vous rappeler du fil sur lequel vous l'avez configuré et il est plus flexible. Bien sûr, ce n'est pas aussi haut niveau, donc si vous voulez vraiment des fichiers sauvegardés sur le disque, vous devrez écrire vous-même les E/S. Cela ne devrait pas être une énorme difficulté - c'est comme quatre lignes de code supplémentaires.

-W

Questions connexes