2016-05-11 1 views
0

Disons que j'ai une « personne » classe NSManagedObject:Est-ce que quelqu'un peut clarifier "refreshObject: mergeChanges: YES" pour moi?

class Person: NSManagedObject { 
    NSManaged var name:String? 
    NSManaged var bestFriend:Person? 
} 

Comment puis-je assurer que la référence à BESTFRIEND comme une « personne » ne crée pas un cycle de référence forte? Je comprends que vous pouvez utiliser refreshObject: mergeChanges pour gérer des références fortes entre des objets CoreData et créer des fautes afin que les références fortes ne persistent pas. Ce que je ne comprends pas, c'est quand je l'utilise, ou où je l'appelle. Est-ce que je l'utilise après avoir d'abord accédé aux objets "Personne"? Est-ce que je l'utilise quand je quitte une vue? Avant ou après un enregistrement ou une suppression? Si quelqu'un pouvait fournir des éclaircissements à ce sujet, je l'apprécierais vraiment. Merci beaucoup!

+0

Qu'essayez-vous d'accomplir? Ne voulez-vous pas persister le 'bestFriend' quand vous persistez' Person'? Ou voulez-vous gérer la mémoire du graphique de l'objet? –

+0

Je veux gérer la mémoire graphique de l'objet pour s'assurer que les cycles de référence forts ne se produisent pas et causer des fuites de mémoire – user3353890

Répondre

1

Vous n'aurez aucun problème avec les fuites de mémoire (pour autant que je puisse comprendre), le seul problème que vous pourriez avoir est un graphique d'objet boursouflé qui est stocké dans la mémoire et doit être "rogné". Si vous voulez "rogner" le graphe d'objet, je suggère de retirer les objets inutilisés du graphe d'objets lorsque vous en avez fini avec eux, sinon ils seront à nouveau dans le graphe d'objets.

Utilisez donc refreshObject:mergeChanges (avec mergeChanges: false) lorsque vous avez fini de travailler avec votre Person et que bestFriend sera transformé en défaut.

+0

ok, merci pour l'explication, j'apprécie l'aide! C'était une bonne réponse. J'ai utilisé l'instrument de fuite pour vérifier s'il y avait des fuites et je n'en ai rencontré aucun. Je vous remercie! – user3353890