ily*_* n. 19 pointers memory-management runtime objective-c
在回答这个问题时,我注意到现代Objective-C运行时使用了标记指针.Mike Ash的文章及其评论指出,它们用于某些NSNumber和NSDate实例.
这让我想到了不同平台的完整情景表:
OSX/iOS 32/64位Objective-C运行时在哪里使用标记指针?
Gre*_*ker 23
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
Run Code Online (Sandbox Code Playgroud)