NSURLSessionDownloadTask (Migration iOS 7 vers iOS 8)
Bonjour à tous !
J'imagine qu'on parle beaucoup de migration vers iOS 8 en ce moment ???
J'ai un système de téléchargement de fichiers volumineux ~200 Mo pièce avec NSURLSession / NSURLSessionTask et bien sûr NSURLSessionDownloadTask.
Sous iOS 7, le téléchargement via un objet NSURLSessionDownloadTask fonctionnait parfaitement bien. Sous iOS 8 c'est pareil sauf que... la mémoire n'est pas libérée au cours du téléchargement. Autrement dit, les blocs téléchargés ne doivent plus être libérés. Sur un iPad 2 (512 Mo de RAM) c'est mort, je plante mon application.
Impossible de trouver des informations là dessus sur le net...
Je suis en train d'explorer plutôt du côté de la configuration NSURLSessionConfiguration pour voir si des choses n'ont pas évoluées de ce côté là .
Si certains d'entre vous ont des infos ou des idées, par avance merci de votre avis.
Je continue mes recherches et je mettrai le sujet à jour.
Bonne soirée à tous.
NasH
Réponses
Test sur Simulateur ou iPhone.
Car le simulateur a des bugs de tps à autres de connexion http ...
Ah j'avais pas vu.
As-tu tenté de repasser par NSUrlConnection ?
Simulateur ou Device, la montée en RAM est identique. Je n'ai par contre pas tenté de simplifier mon "process" en utilisant une simple NSUrlConnection. Je vais regarder ce côté.
Edit : Y'a une gestion pour gérer une barre d'avancement du download sur le NSUrlConnection ? Désolé suis pas très au point là dessus.
Hello,
Je ne pense pas que ça vient des classes NSURLSession/... parce que ç aurait généré une discussion sur le net tellement c'est gênant et la majorité des application utilisent ces classes, mais ça n'exclut aucune éventualité .
Si tu montre le code qui télécharge les données et comment tu traites ces données après ,peut être que ça vient de ton code.
NasH5169
Je parlais du simulateur.
Mon UIViewController utilise les delegate suivantes : NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDownloadDelegate
Dans le viewDidLoad
Sur un bouton, je lance la tâche
Delegate pour passer le credential à la requête
Delegate quand c'est fini (NSURLSessionTask)
Delegate quand c'est fini (NSURLSessionDownloadTask)
Delegate lors du téléchargement d'un bloc pour faire une barre d'avancement
J'utilise pas cette delegate...
C'est à peut être tout. :-/
Petit information qui a son importance :
- Même code
- Même serveur de téléchargement
- Mais restauration iOS 7.1.2 et compilation en iOS 7.1 (sur le projet)
Pas de prise de mémoire...
Je re-migre sous iOS 8 et je vais tester l'application compilée en iOS 7.1
Re-bonjour à tous,
J'ai fait une demande de support auprès d'Apple pour avoir plus d'informations, voici leur réponse :
J'ai testé le programme test qu'ils m'ont filé. J'ai le même souci de prise de mémoire lors du téléchargement et de non libération de la mémoire à la fin.
J'ai vérifié mes schemes pour voir si le debugging n'était pas actif pour ces fameux "zombies". Tout est désactivé rien du tout.
Est-ce que quelqu'un pourrait faire tourner l'exemple URLSession et vérifier la prise ou pas de mémoire vive dans le simulator iPad 2 (xcode 6).
http://www.praetorians-fs.com/divers/jardy_tempo/QTestbed.zip
Merci votre aide.
Bonsoir à tous,
Je me permets de relancer un peu notre sujet et de vous demander si l'un d'entre vous pourrez tester l'exemple fournit ? Ca nous serait d'une grande aide.
Merci à tous.
Suite à un ticket support avec Apple, il s'avère que c'est un souci de xcode 6 et non de NSURLSession. C'est pourquoi le problème est "passé inaperçu". En gros sans rentrer dans les détails, xcode ne libère pas la RAM prise lors d'un téléchargement si il est en mode debug sur le simu ou avec la device connectée. Un bug a été ouvert sur le bug reporting d'Apple et sera corrigé dans une version ultérieure de xcode.