Quelle est la meilleure approche pour le partage des données entre les threads en permanence lors de l'utilisation de base de données? Je télécharge un gros fichier et je veux montrer la progression du téléchargement dans un UIProgressBar
. Le téléchargement réel se passe dans un fil de fond créé par NSOperation
.données de base, les téléchargements de fichiers et thread-safety
Les informations de téléchargement (chemin local, nombre total d'octets, les octets reçus) est modélisé comme un objet géré de base de données et le fichier réel est stocké dans le répertoire Documents /. Une solution qui m'est venue à l'esprit était de créer un contexte d'objet géré séparé dans le thread d'arrière-plan et de le passer le objectID
et de le remonter en utilisant la méthode objectWithID:
. Chaque fois que le thread d'arrière-plan effectue une sauvegarde, le thread principal reçoit une notification et le contexte principal fusionne ces modifications et la vue de la table est ensuite mise à jour.
Cette approche fonctionne, mais la sauvegarde ne peut pas être fait trop souvent ou l'interface utilisateur se fige. Ainsi, l'interface utilisateur est mise à jour après la réception de chaque X Ko de données où X doit être au moins de 500 Ko pour que l'interface utilisateur soit quelque peu réactive. Existe-t-il une meilleure approche pour transmettre les données de progression de téléchargement au thread principal tel qu'il est reçu?
EDIT: Est-ce que l'aide KVO être d'une aide quelconque? Si oui, connaissez-vous de bons tutoriels sur le sujet?
Tout d'abord, c'est génial d'être en mesure d'upvote! ASIHTTPRequest est vraiment sympa et je vais l'intégrer dans mon code. Il offre beaucoup plus de fonctionnalités que mon petit framework de téléchargement et c'est open source :) – Anurag