OC中的isa

1.
》对象的第一个属性必然是isa,因为其来自父类
  (控制台打印:p/x 进行16进制的打印    p/t 二进制打印   p/o 八进制打印  p/d 十进制打印)
  x/4gx object  读取内存中前4个
》isa的初始化和指向分析
2.对象的本质
》结构体
》函数名就是函数指针
3.类可以创建多个吗
》对象可以创建多个,类在整个内存中只有一个
  类在内存中只有一份:这几种方式获取到的类,都是一样的
    Class class1 = [LGPerson class];
    Class class2 = [LGPerson alloc].class;
    Class class3 = object_getClass([LGPerson alloc]);
    Class class4 = [LGPerson alloc].class;
》打印类的内存结构
  x/4gx YQPerson.class
  类的内存,第一位,po之后打印出来类名LGPerson??
  第二位,是superclass指向的内存
  但LGPerson类的isa指针,怎么可能还指向LGPerson呢,所以此处的LGPerson其实是元类
  系统同时创建了一个元类,由编译器创建
》superclass
 类的superclass指向父类,根类的superclass指向nil
 类的isa指向元类,元类的superclass指向父元类,根元类的superclass指向NSObject

4.对象的本质
》结构体
》clang -rewrite-objc fileName.m -o resultFile.cpp   生成c++文件
  查看LGPerson的结构体
》函数编译之后,系统会默认增加两个参数:LGPerson * self,SEL _cmd 。
  所以在方法内部,可以获取到self
》objc_setProperty   set方法
  不同类型的数用不同符号表示:c表示char,i表示int    ivar_getTypeEncoding
》元类中存储类方法
5.成员变量
》@interface {
    NSString *p; // 成员变量
    LGTeacher *t;// 实例变量,特殊的成员变量(经过实例化之后的成员变量)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值