2010-10-19 5 views
6

Je me demande si quelqu'un pourrait expliquer pourquoi le conserver comptage d'un objet géré nouvellement créé est 2. Voici le code que je travaille avec:NSManagedObject conserver le nombre est 2 après la création

NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; 
Album *newAlbum = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; 
NSLog(@"Album retain count: %d", [newAlbum retainCount]); 

Selon Dans la documentation de la méthode insertNewObjectForEntity, il renvoie un nouvel objet auto-libéré. Donc je m'attendrais à ce que le nombre de retenue soit de 1 au lieu de 2. Quelqu'un peut-il expliquer?

Répondre

5

Le nombre de retenues n'est pas garanti pour être précis, vous avez peut-être rencontré un tel cas.

J'ai fait un exemple de projet dans lequel un alloc objet/init avait un nombre de retenir deux, puis 0 lorsqu'il est relâché, etc ...

+2

Non seulement cela n'est pas garanti , la documentation indique qu '"il est très improbable que vous puissiez obtenir des informations utiles de (retainCount)". – Aderstedt

+1

http://whentouseretaincount.com est très utile à cet égard – seanwolter

0

Une autre raison qui peut expliquer cela, est que si vous vous êtes inscrit pour recevoir des notifications d'objets insérés dans ce NSManagedObjectContext, puis l'objet est ajouté à un NSSet qui vous sera transmis sur cette notification, d'où le nombre de retenue de 2.

Questions connexes