Moje pytanie brzmi, w jaki sposób bieżące wersje Foundation (lub biblioteki wykonawczej Objective-C, ponieważ wydaje się, że tam są) implementują liczbę zatrzymań dla obiektów pochodnych NSObject
? Jak mogłem zobaczyć na NSObject.mm, nie ma ivar o nazwie retain count
w ciele interfejsu NSObject
. Zamiast tego wydaje się, że istnieje rodzaj tabeli lub mapy, która zawiera liczniki odwołań dla każdego obiektu. Ale jeśli licznik zatrzymań jest rzeczywiście wykonywany za pomocą mapy, nie są to operacje zbyt kosztowne w przypadku tego rodzaju implementacji (ponieważ w tym przypadku konieczne jest zablokowanie i odblokowanie muteksów, wyszukanie mapy w celu znalezienia odpowiedniego obiektu, oprócz fakt, że w środowisku wielowątkowym można zatrzymać/zwolnić tylko jeden obiekt na raz)?W jaki sposób przeliczana jest wartość NSObject?
Nie mogę znaleźć nic związanego z ustawieniem licznika zachowania do 1 przy przydzielaniu nowy obiekt, ani w _objc_rootAllocWithZone
na NSObject.mm (co wydaje się być funkcja, która jest wywoływana przez [NSObject alloc]
) ani w _class_createInstanceFromZone
w objc-runtime-new.mm (który dostaje nazwany później przez _objc_rootAllocWithZone
).
- (NSUInteger) retainCount {return rand()}; – CodaFi
O, dobry Boże, źle przyjąłem zakończenie, ... Nie będę dziś spać. – CodaFi