虽然answering this question我注意到现代Objective-C运行时使用了标记指针。 article by Mike Ash and its comments注意到它们用于某些NSNumber
和NSDate
个实例。
让我想到了不同平台的完整情景表:
OSX / iOS 32/64位Objective-C运行时在哪里使用标记指针?
答案 0 :(得分:22)
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