在调试一堆NSIndexPath
个对象时,我注意到其中一个对象有一个不寻常的指针。
其中一个索引路径的地址为0xc000000388400016。所以它有两个最高位设置为1.出于兴趣,我很想知道这意味着什么。我知道最低位用于标记指针,但在这种情况下最低位为0。哪些对象被映射到这个高地址范围?
答案 0 :(得分:1)
它是64位代码中的标记指针对象。
点击此处查看更多信息:Github
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
答案 1 :(得分:1)
为可能落在这里的人们澄清一些事情:它实际上是一个标记指针,即使低位设置为0.显然Apple在某些时候更改了标记指针的实现,以便所有基于iOS的系统(从10.11(?)开始的iOS,tvOS,watchOS)和macOS使用高位来识别标记指针。
这是我在Twitter上从Joe Groff那里得到的答案。资料来源:https://twitter.com/jckarter/status/897856728586309632