extension看起来很像一个匿名的category,但是extension和有名字的category几乎完全是两个东西。 extension在编译期决议,它就是类的一部分,在编译期和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,它伴随类的产生而产生,亦随之一起消亡。extension一般用来隐藏类的私有信息,你必须有一个类的源码才能为一个类添加extension,所以你无法为系统的类比如NSString添加extension。(详见2

但是category则完全不一样,它是在运行期决议的。
就category和extension的区别来看,我们可以推导出一个明显的事实,extension可以添加实例变量,而category是无法添加实例变量的(因为在运行期,对象的内存布局已经确定,如果添加实例变量就会破坏类的内部布局,这对编译型语言来说是灾难性的)。

最新文章

  1. Ansible-Tower快速入门-6.查看tower的仪表板【翻译】
  2. SQLServer操作结果集
  3. 原密码忘了,重置MAC开机密码
  4. iOS:核心动画之关键帧动画CAKeyframeAnimation
  5. [算法] 快速排序 Quick Sort
  6. fourinone分布式缓存研究和Redis分布式缓存研究
  7. HTML解析利器-HtmlAgility学习
  8. Web多客户端单点登录
  9. 存储过程sql语句
  10. js延迟函数
  11. 苹果IOS与谷歌 android系统的UI设计原则
  12. LeetCode--030--串联所有单词的字串(java)
  13. 什么是 SaaS (Software as a Service)
  14. 个人博客作业-Week7
  15. Spring Boot 揭秘与实战(二) 数据缓存篇 - EhCache
  16. Java - HashTable源码分析
  17. 七、新时间日期 API
  18. jquery 根据后台传过来的值动态设置下拉框、单选框选中
  19. Linux 权限修改
  20. 苏州Uber优步司机奖励政策(12月14日到12月20日)

热门文章

  1. Imperative programming
  2. ZBrush软件特性之Stencil模板调控板
  3. 速学JavaScript!
  4. 路飞学城Python-Day38(第四模块思维导图)
  5. 每日Linux命令--不完整命令
  6. MyBatis学习总结(18)——MyBatis与Hibernate区别
  7. ASP.NET-datatable转换成list对象
  8. HDU 1023
  9. HDOJ 2189 悼念512汶川大地震遇难同胞——来生一起走 【母函数】
  10. urlrewrite地址重写的使用