Student代码:

@interface XKStudent : XKPerson {@public int _testMember;
}@property (copy, nonatomic) NSString *school;@property (copy, nonatomic) NSString *grade;@end

先看 转译之后的 _class_ro_t 源码:

static struct _class_ro_t _OBJC_CLASS_RO_$_XKStudent = {0,__OFFSETOFIVAR__(struct XKStudent, _testMember),sizeof(struct XKStudent_IMPL),0, "XKStudent",(const struct _method_list_t *)&_OBJC_$_INSTANCE_METHODS_XKStudent,0, (const struct _ivar_list_t *)&_OBJC_$_INSTANCE_VARIABLES_XKStudent,0, (const struct _prop_list_t *)&_OBJC_$_PROP_LIST_XKStudent,
};

之前已经整理过,_class_ro_t 会被 class_t 对象持有,class_t 关键在于 isa 和 superclass 两个指针和 cache。而 _class_ro_t 则主要管理 成员变量、方法、协议、属性。isa、superclass 等的设置会通过 class_setup 相关方法设置,具体源码就不贴出来了。

看的出来:

  1. _ivar_list_t 为:OBJC$_INSTANCE_VARIABLES_XKStudent,表示实例对象的成员变量;
  2. _prop_list_t 为:OBJC$_PROP_LIST_XKStudent,表示属性列表;

这就是 ivar 列表和属性列表;
_INSTANCE_VARIABLES_XKStudent:

static struct /*_ivar_list_t*/ {unsigned int entsize;  // sizeof(struct _prop_t)unsigned int count;struct _ivar_t ivar_list[3];
} _OBJC_$_INSTANCE_VARIABLES_XKStudent  = {sizeof(_ivar_t),3,{{&OBJC_IVAR_$_XKStudent$_testMember, "_testMember", "i", 2, 4},{&OBJC_IVAR_$_XKStudent$_school, "_school", "@\"NSString\"", 3, 8},{&OBJC_IVAR_$_XKStudent$_grade, "_grade", "@\"NSString\"", 3, 8}}
};

_PROP_LIST_XKStudent:

static struct /*_prop_list_t*/ {unsigned int entsize;  // sizeof(struct _prop_t)unsigned int count_of_properties;struct _prop_t prop_list[2];
} _OBJC_$_PROP_LIST_XKStudent __attribute__ ((used, section ("__DATA,__objc_const"))) = {sizeof(_prop_t),2,{{"school","T@\"NSString\",C,N,V_school"},{"grade","T@\"NSString\",C,N,V_grade"}}
};

总结:

  1. 属性是 ivar 的子集;
  2. 属性是通过编译器特性生成的,不仅添加到了成员变量,还添加了 setter 和setter 和 getter 以支持点语法;
  3. _xxx 则是直接追加到结构体中,不能使用点语法的;

http://www.taodudu.cc/news/show-1912774.html

相关文章:

  • bound、frame、position、anchorPoint
  • Java、OC、C/C++中的null
  • iOS:Tagged Pointer
  • sqlite3源码调试
  • 红黑树、B树、B+树各自适用的场景
  • 动态库的隐式链接和显示链接
  • iOS:懒加载符号绑定流程
  • 汇编:call和jmp
  • code review的一些思考
  • iOS:fishhook原理分析
  • mach-O文件结构分析
  • 设备唯一标志的解决方案
  • iOS:主流启动优化方案浅析
  • iOS:segment对齐原则
  • HTTP缓存机制及其在iOS中的应用
  • iOS:SideTable
  • iOS:isa指针
  • iOS底层:PAGEZERO的作用
  • iOS图形学(三):屏幕成像原理
  • iOS图形学(四):iOS中的绘图框架
  • Java基础(一):简介和基础数据类型
  • Java基础(二):面向对象
  • Java:常量池
  • Java基础(三):常用对象
  • Java基础(四):异常处理
  • Java基础(五):多线程
  • Android:权限处理
  • AsyncTask的基本使用
  • 在Nginx中配置SSL证书
  • Base64编码流程

ivar和property相关推荐

  1. iOS之runtime详解api(三)

    第一篇我们讲了关于Class和Category的api,第二篇讲了关于Method的api,这一篇来讲关于Ivar和Property. 4.objc_ivar or Ivar 首先,我们还是先找到能打 ...

  2. 使用FastCoder写缓存单例

    使用FastCoder写缓存单例 FastCoder可以存储字典,数组,鄙人将FastCoder封装,CoreData可以缓存的东西,用这个都可以缓存,但是只适合缓存少量的数据(不适合存储几万条数据) ...

  3. iOS 中 #import同@class之间的区别

    很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在m文件中,而h文件仅仅使用@class进行声明,不禁纳闷起来,为什么不直接把#import放到h文件中呢? 这是 ...

  4. unity 材质球无法编辑_游戏资源工具(一):Unity中处理材质球过期属性工具

    1.起因 近期项目中采用了美术工程方案,在该方案中美术在提交资源包的时候会强制做资源规范检查,其中有一条资源规范的规则是"不能引用资源文件夹以外的任何资源".某天,有一个美术同学找 ...

  5. YYModel的深入理解

    文件结构 ​ 相信使用过MJExtensions的iOS开发者来说,接触YYModel并不是很陌生,因为两者在某些思路上是相似的,例如都用了category的方式来实现,Protocol中的方法都有着 ...

  6. YYModel解析2

    主体分层 YYClassInfo主要分为以下几部分: typedef NS_OPTIONS(NSUInteger, YYEncodingType)与YYEncodingType YYEncodingG ...

  7. iOS内存管控实战(中)-分析工具篇

    因文章单篇过长,按照 原理.分析工具 和 实战 拆分成上.中.下三部分,点击阅读. iOS内存管控实战(上)-原理篇 iOS内存管控实战(中)-分析工具篇 iOS内存管控实战(下)-实战篇 二.内存分 ...

  8. 1-runtime的Method,IMP,Property,ivar

    基础定义 objc-750 的tar包 objc-private.h 定义 typedef struct objc_class *Class; typedef struct objc_object * ...

  9. @property、@sythesize以及Ivar和@dynamic讲解(下)

    下面仅仅是一些基本知识,可能有些知识用的比较少,不过知道怎么使用或者了解这个知识,还是不错的,毕竟技多不压身嘛!读完这篇文章大约需要5-10分钟左右!!! 一.@property 1.在头文件中: @ ...

  10. 从@property说起(四)深入成员变量

    之前的三篇文章都讲的是interface和setter/getter,这一篇就讲一下ivar. 什么是成员变量 @interface MyViewController :UIViewControlle ...

最新文章

  1. Windows不能识别环境变量的原因。
  2. php 使用 go函数指针,golang 什么时候使用指针
  3. php utf8 html字符,PHP:utf-8编码,htmlentities给出了奇怪的结果
  4. SQL SERVER 2005 进行XML查询
  5. idea修改回默认字体,设置 IntelliJ Idea 的中英文字体
  6. zabbix 监控mongodb
  7. python跟java 效率_Python注重可读性和效率:与Java、PHP以及 C++语言对比谁受欢迎?...
  8. stl标准模板库_如何在C ++ STL(标准模板库)中使用Pair
  9. 人脸对齐(八)--LBF算法
  10. VS2017和VS2019(社区版)离线激活方式
  11. 软考论文答题纸PDF
  12. python zemax_python的用途和优点
  13. 六、CSS3的美化字体与段落
  14. 电脑ping,电脑ping怎么用|电脑ping怎么打开_PC6教学
  15. 高德地图广告投放的优势、效果!
  16. SMS注册与接收短信
  17. 英格兰的政治+德意志的工业科技+犹太的金融+北美的丰富资源=世界NO.1强国
  18. JS中对象key为数字的使用
  19. 如何查看Win11的CUDA版本
  20. HTML+CSS系列学习:重生之我要精通编程语言修仙

热门文章

  1. necos 分布式配置中心 配置方法 动态修改值 切换生产环境
  2. 设计模式 (十八 ) 观察者模式
  3. OCP题库062新出现的考试题-第23题
  4. centos7安装lamp
  5. 世上哪有那么多的怀才不遇
  6. C++ - 使用copy函数打印容器(container)元素
  7. 一次idea上使用logback+slf4j乱码的解决,问题不在logback
  8. 老李推荐:第6章2节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-获取命令字串...
  9. Linux下登陆mysql服务器不需要输入账号密码信息
  10. 高性能 TCP UDP 通信框架 HP-Socket v3.3.1