La mia domanda è come implementano le versioni correnti di Foundation (o della libreria di runtime Objective-C, poiché ciò sembra essere lì) conteggio trattenuto per oggetti derivati NSObject
? Come ho potuto vedere a NSObject.mm, non esiste alcun ivar chiamato retain count
nel corpo dell'interfaccia di NSObject
. Invece, sembra esserci un tipo di tabella o mappa che contiene contatori di riferimenti per ciascun oggetto. Ma se il conteggio dei ritardi è fatto con una mappa, non sono le operazioni retain
e release
troppo costose con questo tipo di implementazione (poiché, in questo caso, è necessario bloccare e sbloccare i mutex, cercare la mappa per trovare l'oggetto giusto, oltre il fatto che, in un ambiente multithread, solo un oggetto può essere mantenuto/rilasciato alla volta)?Come viene implementato il conto di mantenimento in NSObject?
Non ho trovato tutto ciò che riguarda l'impostazione del contatore mantenere a 1 quando l'assegnazione di un nuovo oggetto, né in _objc_rootAllocWithZone
a NSObject.mm (che sembra essere la funzione che viene chiamata da [NSObject alloc]
), né in _class_createInstanceFromZone
a objc-runtime-new.mm (che ottiene chiamato in seguito da _objc_rootAllocWithZone
).
- (NSUInteger) retainCount {return rand()}; – CodaFi
Oh buon dio, ho smarrito il termine: ... Non dormirò stanotte. – CodaFi