Помеченные указатели в 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
Другие вопросы по тегам