Objective c 有没有一种方法可以告诉在内存中查找对象属性的特定位置?

Objective c 有没有一种方法可以告诉在内存中查找对象属性的特定位置?,objective-c,memory,lldb,Objective C,Memory,Lldb,所以这个问题可能是无效的,根据我的理解 但假设堆上有一个对象,比如0x61800001234 如果我使用Xcode的内存调试器来查看该地址的内存, 我只是看到一堆信息,对吗 现在就我的理解而言,您在该地址会发现的第一件事是isa指针,它是一个ClassAKAobjc_Class 它看起来只占用了8个字节 所以在这个例子中: 看起来isa的内容是: 011DFFF9C1B89F9 很好,很好,很漂亮 假设我们有一节课 @interface testClass : NSObject @prope

所以这个问题可能是无效的,根据我的理解

但假设堆上有一个对象,比如0x61800001234

如果我使用Xcode的内存调试器来查看该地址的内存, 我只是看到一堆信息,对吗

现在就我的理解而言,您在该地址会发现的第一件事是
isa
指针,它是一个
Class
AKA
objc_Class

它看起来只占用了8个字节

所以在这个例子中:

看起来
isa
的内容是:
011DFFF9C1B89F9

很好,很好,很漂亮

假设我们有一节课

@interface testClass : NSObject
@property int testIntProperty;
@end
假设
isa
之后内存中没有任何内容,它直接进入属性, 如果我们查看
testClass
实例在内存中的位置, 我希望前8个字节是
isa
,然后接下来的4个字节是
int
属性,剩下的则无关紧要

所以我的问题是: 在该示例中,我们可以通过查看属性的头来判断
testIntProperty
将位于距离对象开头8个字节的位置

但是有没有一种方法可以准确地知道它将在哪里,比如说如果有10处房产,你想知道第10处房产在哪里


我之所以问这个问题,是因为我想查看一个特定属性的指针,而我很难在内存中找到它。在运行时,我得到了一个EXC_BAD_访问,地址为
0x18
,但我很想在内存中实际查看我期望该属性存在的位置,我想清楚地看到0x18

在现代运行时,你不能假定类的布局只是按顺序排列的实例变量/属性;您可以在多个位置声明这些属性-接口和实现,您必须知道使用了什么填充,您不知道何时处理属性支持变量,等等

但是,您可以在调试器中轻松确定偏移量。假设您在
testClass
的实例方法中,因此
self
引用它,并输入:

p (char *)&self->_testIntProperty - (char *)self
它将打印偏移量。强制转换是使调试器满意所必需的


HTH

在现代运行时,您不能假定类的布局只是按顺序排列的实例变量/属性;您可以在多个位置声明这些属性-接口和实现,您必须知道使用了什么填充,您不知道何时处理属性支持变量,等等

但是,您可以在调试器中轻松确定偏移量。假设您在
testClass
的实例方法中,因此
self
引用它,并输入:

p (char *)&self->_testIntProperty - (char *)self
它将打印偏移量。强制转换是使调试器满意所必需的


HTH

看一看:您可以使用
call(int)[0x61800001234 testIntProperty]
检查调试器中属性的值。如果属性是指向对象的指针,请使用
po[0x61800001234 testObjectProperty]
。查看:您可以使用
call(int)[0x61800001234 TestInProperty]
在调试器中检查属性的值。如果属性是指向对象的指针,请使用
po[0x61800001234 testObjectProperty]