Подтвердить что ты не робот

Tagged pointers в Objective-C

В то время как отвечая на этот вопрос, я отметил, что современная среда Objective-C использует тегированные указатели. статьи Майка Эша и его комментарии отмечают, что они используются для некоторых экземпляров NSNumber и NSDate.

Что заставило меня задуматься о полной таблице сценариев для разных платформ:

Где использует OSX/iOS 32/64-бит Objective-C тегированные указатели?

4b9b3361

Ответ 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