区块链技术博客
www.b2bchain.cn

类的分析-isa分析求职学习资料

本文介绍了类的分析-isa分析求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

探究对象时发现对象的isa指向的是类。万物皆对象类也是个对象,类里面也有一个isa,那么类的isa是指向那个类呢?这个类就是苹果定义的元类

元类

元类是编译器自动生成,苹果为什么要自动生成这么一个类呢?那就来探究下

类对象的内存个数

int main(int argc, char * argv[]) {     @autoreleasepool {        Class class1 = [LWPerson class];        Class class2 = [LWPerson alloc].class;        Class class3 = object_getClass([LWPerson alloc]);        Class class4 = [LWPerson alloc].class;        NSLog(@"n-%p-n-%p-n-%p-n-%p-",class1,class2,class3,class4);     }     return  }  -0x100009510- -0x100009510- -0x100009510- -0x100009510-

源码分析:类对象的地址都是一样的,内存中每一个类只有一块内存,和普通的对象有明显的区别

类的分析-isa分析

  • LWPerson类有两个不一样的地址,但是一个类对象只有一个地址。
  • 0x0000000100009500LWPerson类地址,那么0x00000001000094d8这个类地址苹果把它叫做元类

总结

  • 元类是系统编译器自动创建的,和用户没关系
  • 对象的isa指向类类对象的isa指向元类
  • 类的类名和它关联类即元类的类名是一样的(只有关联元类才有类名)

isa 走位图

对象元类都有isa, 具体isa走向流程是如何的。 创建一个对象NSObject * obj = [NSObject alloc],结合lldb进行探究

类的分析-isa分析

  • NSObject的对象objisa –> NSObject
  • NSObject类的isa–> 根元类
  • 根元类的isa–> 根元类(指向自己)

自定义LWPerson类,创建一个对象LWPerson * person = [LWPerson alloc],结合lldb进行探究

类的分析-isa分析

元类的isa指向根元类,疑问:为什么不是指向NSbOject?注意NSbOject类地址和根元类类地址不一样,所以指向的是根元类

  • LWPerson的对象personisa –> LWPerson
  • LWPerson类的isa–> LWPerson类的元类
  • 元类isa–> 根元类

isa走位流程图

类的分析-isa分析

探究对象时发现对象的isa指向的是类。万物皆对象类也是个对象,类里面也有一个isa,那么类的isa是指向那个类呢?这个类就是苹果定义的元类

元类

元类是编译器自动生成,苹果为什么要自动生成这么一个类呢?那就来探究下

类对象的内存个数

int main(int argc, char * argv[]) {     @autoreleasepool {        Class class1 = [LWPerson class];        Class class2 = [LWPerson alloc].class;        Class class3 = object_getClass([LWPerson alloc]);        Class class4 = [LWPerson alloc].class;        NSLog(@"n-%p-n-%p-n-%p-n-%p-",class1,class2,class3,class4);     }     return  }  -0x100009510- -0x100009510- -0x100009510- -0x100009510-

源码分析:类对象的地址都是一样的,内存中每一个类只有一块内存,和普通的对象有明显的区别

类的分析-isa分析

  • LWPerson类有两个不一样的地址,但是一个类对象只有一个地址。
  • 0x0000000100009500LWPerson类地址,那么0x00000001000094d8这个类地址苹果把它叫做元类

总结

  • 元类是系统编译器自动创建的,和用户没关系
  • 对象的isa指向类类对象的isa指向元类
  • 类的类名和它关联类即元类的类名是一样的(只有关联元类才有类名)

isa 走位图

对象元类都有isa, 具体isa走向流程是如何的。 创建一个对象NSObject * obj = [NSObject alloc],结合lldb进行探究

类的分析-isa分析

  • NSObject的对象objisa –> NSObject
  • NSObject类的isa–> 根元类
  • 根元类的isa–> 根元类(指向自己)

自定义LWPerson类,创建一个对象LWPerson * person = [LWPerson alloc],结合lldb进行探究

类的分析-isa分析

元类的isa指向根元类,疑问:为什么不是指向NSbOject?注意NSbOject类地址和根元类类地址不一样,所以指向的是根元类

  • LWPerson的对象personisa –> LWPerson
  • LWPerson类的isa–> LWPerson类的元类
  • 元类isa–> 根元类

isa走位流程图

类的分析-isa分析

探究对象时发现对象的isa指向的是类。万物皆对象类也是个对象,类里面也有一个isa,那么类的isa是指向那个类呢?这个类就是苹果定义的元类

元类

元类是编译器自动生成,苹果为什么要自动生成这么一个类呢?那就来探究下

类对象的内存个数

int main(int argc, char * argv[]) {     @autoreleasepool {        Class class1 = [LWPerson class];        Class class2 = [LWPerson alloc].class;        Class class3 = object_getClass([LWPerson alloc]);        Class class4 = [LWPerson alloc].class;        NSLog(@"n-%p-n-%p-n-%p-n-%p-",class1,class2,class3,class4);     }     return  }  -0x100009510- -0x100009510- -0x100009510- -0x100009510-

源码分析:类对象的地址都是一样的,内存中每一个类只有一块内存,和普通的对象有明显的区别

类的分析-isa分析

  • LWPerson类有两个不一样的地址,但是一个类对象只有一个地址。
  • 0x0000000100009500LWPerson类地址,那么0x00000001000094d8这个类地址苹果把它叫做元类

总结

  • 元类是系统编译器自动创建的,和用户没关系
  • 对象的isa指向类类对象的isa指向元类
  • 类的类名和它关联类即元类的类名是一样的(只有关联元类才有类名)

isa 走位图

对象元类都有isa, 具体isa走向流程是如何的。 创建一个对象NSObject * obj = [NSObject alloc],结合lldb进行探究

类的分析-isa分析

  • NSObject的对象objisa –> NSObject
  • NSObject类的isa–> 根元类
  • 根元类的isa–> 根元类(指向自己)

自定义LWPerson类,创建一个对象LWPerson * person = [LWPerson alloc],结合lldb进行探究

类的分析-isa分析

元类的isa指向根元类,疑问:为什么不是指向NSbOject?注意NSbOject类地址和根元类类地址不一样,所以指向的是根元类

  • LWPerson的对象personisa –> LWPerson
  • LWPerson类的isa–> LWPerson类的元类
  • 元类isa–> 根元类

isa走位流程图

类的分析-isa分析

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 类的分析-isa分析求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们