2010-10-19 9 views
6

Me pregunto si alguien podría explicar por qué el recuento de un objeto administrado recién creado es retener 2. Aquí está el código que estoy trabajando con:NSManagedObject retener el recuento es 2 después de la creación

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]); 

Según la documentación para el método insertNewObjectForEntity, devuelve un objeto de autorreproducción creado recientemente. Entonces, esperaría que el recuento de retención fuera de 1 en lugar de 2. ¿Puede alguien explicar?

Respuesta

5

El recuento de contenedores no garantiza la precisión, es posible que haya encontrado un caso de este tipo.

He hecho un proyecto de ejemplo en el que un objeto alloc/init estaba teniendo una cuenta de retención de los dos, entonces 0 cuando se libera, etc ...

+2

No solo no se garantiza que sea precisa , la documentación establece que "es muy poco probable que pueda obtener información útil de (retainCount)". – Aderstedt

+1

http://whentouseretaincount.com es muy útil en este sentido – seanwolter

0

Otra de las razones que pueden explicar esto, es que si se se ha registrado para recibir notificaciones de objetos insertados en ese NSManagedObjectContext, luego el objeto se agrega a un NSSet que se le pasará en esa notificación, de ahí el conteo de retención de 2.

Cuestiones relacionadas