我们在上个文章对象,联合体和isa探索中探索了isa
,其中有张经典的图:
这里我们探索一下
类 & 类结构
:
准备工作:
- 我们在探索过程中需要用到的
lldb
调试指令:
bt 打出堆
register read 读取寄存器
x 读取内存段
x/4gx 读取当前断点位置起的4段内存段
po 打印
p 打印详细
p/x 以16进制读取对象的地址或者值
- 继承自
NSObject
的类LPerson
@interface LPerson : NSObject
{
NSString *hobby;
}
@property (nonatomic, copy) NSString *cjl_name;
- (void)sayHello;
+ (void)sayBye;
@end
@implementation LPerson
- (void)sayHello
{}
+ (void)sayBye
{}
@end
- 继承自
LPerson
的类LTeacher
@interface LTeacher : LPerson
@end
@implementation LTeacher
@end
- 在main中分别用两个定义两个对象:
person & teacher
int main(int argc, const char * argv[]) {
@autoreleasepool {
//ISA_MASK 0x00007ffffffffff8ULL
CJLPerson *person = [CJLPerson alloc];
CJLTeacher *teacher = [CJLTeacher alloc];
NSLog(@"Hello, World! %@ - %@",person,teacher);
}
return 0;
}
开始探索
-
我们在
main
函数中的对象创建完之后打个断点,运行工程,使用x/4gx person
可以看到0x001d80010000228d
就是person
的isa
:
这