objective-c pointers memory-management runtime

objective c - Punteros etiquetados en Objective-C



pointers memory-management (1)

Mientras respondía esta pregunta , noté que el moderno tiempo de ejecución de Objective-C usa punteros etiquetados. El artículo de Mike Ash y sus comentarios señalan que se usan para algunas instancias de NSNumber y NSDate .

Lo que me hizo pensar en la tabla completa de escenarios para diferentes plataformas:

¿Dónde utiliza el puntero etiquetado el tiempo de ejecución Objective-C de OSX / iOS 32/64-bit?


OS X y iOS utilizan objetos punteros etiquetados en código de 64 bits. Ninguno de los dos utiliza actualmente objetos punteros etiquetados en código de 32 bits, aunque en principio no es imposible. El conjunto específico de clases optimizadas y valores optimizados cambia con frecuencia. El código abierto objc4 / runtime / objc-internal.h describe este conjunto de clases que se usó en al menos una versión del sistema operativo:

OBJC_TAG_NSAtom = 0, OBJC_TAG_1 = 1, OBJC_TAG_NSString = 2, OBJC_TAG_NSNumber = 3, OBJC_TAG_NSIndexPath = 4, OBJC_TAG_NSManagedObjectID = 5, OBJC_TAG_NSDate = 6, OBJC_TAG_7 = 7