【发布时间】:2017-07-05 22:15:26
【问题描述】:
所以这个问题可能是无效的,取决于我的理解,
但是假设我们在堆上有一个对象,比如在 0x618000001234
如果我使用 Xcode 的内存调试器来查看该地址的内存, 我只是看到一堆信息,对吧?
现在就我的理解而言,您会在该地址找到的第一件事是 isa 指针,它是 Class AKA objc_class
看起来isa 的内容是:
011DFFFF9C1B89F9
很好,很好,花花公子
假设我们有一个类
@interface testClass : NSObject
@property int testIntProperty;
@end
假设isa之后内存中没有任何内容,它直接进入属性,
如果我们查看testClass 实例在内存中的位置,
我希望前 8 个字节是 isa,然后接下来的 4 个字节是 int 属性,然后其余的无关紧要
所以我的问题是:
在那个例子中,我们可以知道testIntProperty 将位于对象开头的 8 个字节处,只需查看属性的标题
但是有没有办法准确地知道它的位置,比如是否有 10 个属性,并且您想知道第 10 个属性在哪里?
我问的原因是因为我想查看特定属性的指针,而我很难在内存中找到它。在运行时,我得到一个 EXC_BAD_ACCESS,地址为0x18,但我很想在内存中实际查看我希望该属性存在的位置,并且我想清楚地看到 0x18
【问题讨论】:
-
您可以使用
call (int)[0x618000001234 testIntProperty]在调试器中检查属性的值。如果属性是指向对象的指针,请使用po [0x618000001234 testObjectProperty]。
标签: objective-c memory lldb