2010-10-19 9 views
6

Mi chiedo se qualcuno potrebbe spiegare il motivo per cui il conteggio di un oggetto gestito appena creato conservano è 2. Ecco il codice con cui sto lavorando:NSManagedObject mantenere conteggio è 2 dopo la creazione

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

Secondo la documentazione per il metodo insertNewObjectForEntity, restituisce un oggetto autoreleased appena creato. Quindi mi aspetterei che il conteggio dei ritiri sia 1 anziché 2. Qualcuno può spiegare?

risposta

5

Il conteggio di conservazione non è garantito per la precisione, è possibile che si sia verificato un caso del genere.

Ho fatto un progetto di esempio in cui un oggetto alloc/init stava avendo un conteggio di conservare due, poi 0 quando viene rilasciato, ecc ...

+2

Non solo non è garantito che sia accurato , la documentazione afferma che "è molto improbabile che tu possa ottenere informazioni utili da (retainCount)". – Aderstedt

+1

http://whentouseretaincount.com è molto utile a questo proposito – seanwolter

0

Un altro motivo che può spiegare questo, è che se si registrati per ricevere notifiche di oggetti inseriti in quel NSManagedObjectContext, quindi l'oggetto viene aggiunto a un NSSet che verrà passato a te su quella notifica, quindi il conteggio dei ritardi di 2.

Problemi correlati