能否想编译后的类中添加实例变量,能否像运行时创建的类添加实例变量?为什么?

  1. 不能向编译后得到的类增加实例变量
  2. 能向运行时创建的类中添加实例变量

解释:

  1. 编译后的类已经注册在runtime中,类结构体中的objc_ivar_list实例变量的链表和instance_size实例变量的内存大小已经确定,runtime会调用class_setvarlayout或class_setWeaklvarLayout来处理strong weak引用.所以不能向存在的类中添加实例变量

     2.运行时创建的类是可以添加实例变量,调用class_addIvar函数.但是的在调用objc_allocateClassPair之后,objc_registerClassPair之前,原因同上.

posted @ 2017-02-25 20:55  昊天科技  阅读(1373)  评论(0编辑  收藏  举报