2012-06-07 3 views
2

Je travaillais sur mon application iOS et mon but est de sauvegarder un fichier que je reçois de l'Internet petit à petit. Ma configuration actuelle est que j'ai un objet NSMutableData et j'y ajoute un peu de données lorsque je reçois mon fichier. Après la réception du dernier "paquet", j'écris le NSData dans un fichier et le processus est terminé. Je suis un peu inquiet que ce n'est pas la façon idéale de le faire en raison des limitations de RAM dans un appareil mobile et il serait problématique de recevoir des fichiers volumineux.Efficacité d'économie de fichiers iOS Efficacité

Ma pensée suivante était d'implémenter un NSFileHandle afin que le fichier arrive, il serait sauvegardé sur le disque, plutôt que sur la mémoire virtuelle.

En termes de rapidité et d'efficacité, quelle méthode, selon vous, fonctionnera décemment sur un appareil iOS? J'utilise actuellement la première approche, NSMutableData. Est-il utile de changer mon application pour utiliser le NSFileHandle?

Merci à l'avance, Guvvy

Répondre

1

Si les données que vous téléchargez est sans bornes (c.-à-ne possède pas une taille maximale de fichier), il serait intéressant de vous en mettre dans un certain code dans votre téléchargement & enregistrer le schéma pour vider les données de votre objet "NSMutableData" dans un fichier à un certain point de basculement (par exemple 2K, 10K, 1Meg, peu importe). Et puis ajouter sur ce fichier lorsque l'objet de données en mémoire se remplit à nouveau.

Puisqu'un iDevice n'a pas de disque dur physique (enfin, je veux dire un plateau qui tourne et de la puissance supplémentaire est tirée pour démarrer le filage et lire & têtes d'écriture), cela peut aussi valoir la peine il suffit d'écrire ces octets directement dans la poignée de fichiers dès le départ. Je ne crois pas que ça va coûter quelque chose de plus en termes de consommation d'énergie. La plus grande consommation d'énergie est dans la communication de réseau (la communication cellulaire est le pouvoir du porc, les connexions WiFi un peu moins).

0

Dépend de la taille du fichier que vous téléchargez. Si vous allez utiliser le fichier tout de suite, la première option serait la meilleure, vu comme si elle serait d'abord sauvegardée dans la mémoire RAM avant d'être sauvegardée sur le disque, et ensuite tout être chargé dans la RAM. Toutefois, s'il s'agit d'un fichier très volumineux, il peut être utile de l'enregistrer sur le disque, même s'il sera utilisé pour que l'iPhone puisse le gérer en arrière-plan. C'est à vous de décider, il suffit de faire quelques tests et de voir ce que ça fait quand vous utilisez l'application.

0

Vous pouvez essayer d'utiliser AFNetworking et leur Streaming Request:

NSURL *url = aUrl; 
NSString *path = aPath; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:YES]; 
[operation start];