04 - 类 & 类结构探索

我们在上个文章对象,联合体和isa探索中探索了isa,其中有张经典的图:

对象、类、元类、根元类的关系

这里我们探索一下类 & 类结构:

准备工作:

  1. 我们在探索过程中需要用到的lldb调试指令:
bt               打出堆
register read    读取寄存器
x                读取内存段
x/4gx            读取当前断点位置起的4段内存段
po               打印
p                打印详细
p/x              以16进制读取对象的地址或者值
  1. 准备一份可以运行的objc4-781源码,有兴趣的也可以自行配置
  2. 定义两个类:
  • 继承自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就是personisa:

    person的isa

你可能感兴趣的:(04 - 类 & 类结构探索)