Objective-C中的标记指针

时间:2013-12-03 21:48:12

标签: objective-c pointers memory-management runtime

虽然answering this question我注意到现代Objective-C运行时使用了标记指针。 article by Mike Ash and its comments注意到它们用于某些NSNumberNSDate个实例。

让我想到了不同平台的完整情景表:

  

OSX / iOS 32/64位Objective-C运行时在哪里使用标记指针?

1 个答案:

答案 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