2010-08-12 2 views
0

J'importe un tas de données d'un service Web sur un thread d'arrière-plan et je rencontre de manière aléatoire de mauvais problèmes d'accès, je crois surtout à l'attribution de relations.Cycle de vie de l'entité Core Data? Quand sont-ils libérés?

Je me demande combien de temps les nouvelles entités que je crée et économise traînent-elles?

Répondre

0

Core Data suit les mêmes règles que tout autre objet en Objective-C, sauf avec une légère torsion. Les données de base décideront en interne quand libérer les objets, donc même si vous avez fini avec un objet et que vous avez libéré toutes vos références, il peut rester après cela en fonction de ce que les données de base décident de faire avec il.

En outre, lorsqu'un NSManagedObject est chargé en mémoire, l'objet entier peut ne pas être nécessairement chargé. Les données de base, par défaut, chargeront la structure de base de l'objet mais ne chargeront pas dans ses données ou relations. Cela maintient l'empreinte mémoire initiale très faible. Lorsque vous accédez à une propriété, l'instance entière est entièrement réalisée. La réponse courte est la suivante: Tant que vous suivez les règles de libération de conservation, vous n'avez pas besoin de vous soucier de la gestion de la mémoire avec les données de base.

0

Ils sont libérés lorsque le nombre de rétention = 0. À moins que vous ne les preniez en charge d'une manière ou d'une autre, ils disparaîtraient lorsque le pool d'auto-libération se dissiperait. En supposant que vous les créez avec ... insertNewObjectForEntityForName:inManagedObjectContext:

Le contexte d'objet géré conserve l'enregistrement mais NSManagedObject obéit aux mêmes règles de conservation/libération que tout autre objet. Considérez NSManagedObject comme un conteneur d'exécution pour les données sous-jacentes.

Si vous voulez garder une prise de les utiliser un NSArrayController pour OS X ou un NSMutableSet pour UIKit sont des suggestions

+0

merci - c'est exactement ce que je fais. Je ne savais pas si disons que plus de 1000 entités ont été créées, certaines seraient libérées en raison de contraintes de mémoire ou quelque chose comme ça avant même d'avoir atteint [la version pool]. – Slee