Помеченные указатели в Objective-C
Отвечая на этот вопрос, я отметил, что современная среда выполнения Objective C использует теговые указатели. В статье Майка Эша и ее комментариях отмечается, что они используются для некоторых NSNumber
а также NSDate
экземпляров.
Что заставило меня задуматься о полной таблице сценариев для разных платформ:
Где OSX/iOS 32/64-bit Objective-C использует теговые указатели?
1 ответ
OS X и iOS оба используют теговые объекты указателя в 64-битном коде. В настоящее время ни один из них не использует объекты теговых указателей в 32-битном коде, хотя в принципе это не невозможно. Конкретный набор оптимизированных классов и оптимизированных значений часто меняется. Открытый исходный код objc4/runtime/objc-internal.h описывает этот набор классов, который использовался по крайней мере в одной версии ОС:
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