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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。