2010-10-19 15 views
6

Zastanawiam się, czy ktoś może wyjaśnić dlaczego liczbę nowo utworzonej zarządzanego obiektu zachowują to 2. Oto kod pracuję z:NSManagedObject zachowują licznik jest 2 po utworzeniu

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

Według dokumentacja dla metody insertNewObjectForEntity, zwraca nowo utworzony autoreleased obiekt. Tak więc oczekiwałbym, że zatrzymanie będzie miało wartość 1 zamiast 2. Czy ktoś może wyjaśnić?

Odpowiedz

5

Nie można zagwarantować, że licznik zatrzymania nie jest dokładny, być może napotkano taki przypadek.

Zrobiłem przykładowy projekt, w którym obiekt alloc/init był o krok od utrzymania dwóch, a następnie 0 po zwolnieniu, etc ...

+2

Nie tylko nie gwarantuje się dokładności , dokumentacja stwierdza, że ​​"jest bardzo mało prawdopodobne, że można uzyskać przydatne informacje z (retainCount)". – Aderstedt

+1

http://whentouseretaincount.com jest bardzo pomocny w tym zakresie – seanwolter

0

Innym powodem, że może wyjaśnić to, że jeśli zarejestrowałeś się, aby otrzymywać powiadomienia o obiektach wstawionych do tego NSManagedObjectContext, następnie obiekt jest dodawany do NSSet, który zostanie ci przekazany w tym powiadomieniu, a zatem zatrzymana liczba 2.

Powiązane problemy