- 2
- 0
- 约7.76千字
- 约 19页
- 2018-06-02 发布于江西
- 举报
深入理解Objective-C:Category.docx
1、Category介绍类别。?使用方法自行搜索。使用场景:1、给已经存在的类添加方法。2、把类的实现放在不同的文件里面。好处如下:?(1)可以减少单个文件的体积。?(2)可以把不同的功能组合到不同的category里?(3)可以按需要加载想要的category3、声明私有方法4、模拟多继承5、把framework的私有方法公开2、Category和ExtensionExtension扩展,更像是一个匿名的category。但是二者几乎完全是两个东西。ExtensionExtension是在编译器决议,它就是类的一部分,在编译器和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,它伴随类的产生而产生,亦随着一起消忘。Extension一般用来隐藏类的私有信息。你必须有一个类的源码才能为一个类添加extension,所以无法为系统的类添加extension。CategoryCategory是运行期决议的。?在运行期,对象的内存布局已经确定,所以是无法添加实例变量的。如果添加实例变量会破坏类的内部布局,这对编译型语言来说是灾难性的。3、Category真面目我们知道,所有的OC类和对象,在runtime层都是用struct表示的,category也不例外,在runtime层,category用结构体category_t(在objc-runtime-new.h中可以找到此定义)。?它包含了?1)、类的名字(name)?2)、类(cls)?3)、category中所有给类添加的实例方法的列表(instanceMethods)?4)、category中所有添加的类方法的列表(classMethods)?5)、category实现的所有协议的列表(protocols)?6)、category中添加的所有属性(instanceProperties)从category的定义也可以看出category的可为(可以添加实例方法,类方法,甚至可以实现协议,添加属性)和不可为(无法添加实例变量)。?ok,我们先去写一个category看一下category到底为何物:@interfaceMyClass : NSObject- (void)printName;@end@interfaceMyClass(MyAddition)@property(nonatomic, copy) NSString *name;- (void)printName;@end1234567891011121314@implementationMyClass- (void)printName{NSLog(@%@,@MyClass);}@end@implementationMyClass(MyAddition)- (void)printName{NSLog(@%@,@MyAddition);}@end1234567891011121314151617(在这篇文章中,会出现警告:”Category is implementing a method which will also be implemented by its primary class”. 有洁癖的小伙伴请左拐?传送门)我们使用clang的命令去看看category到底会变成什么:clang -rewrite-objcMyClass.m?【clang操作传送门】好吧,我们得到了一个3M大小,10w多行的.cpp文件(这绝对是Apple值得吐槽的一点),我们忽略掉所有和我们无关的东西,在文件的最后,我们找到了如下代码片段:staticstruct/*_method_list_t*/ {unsignedintentsize; // sizeof(struct _objc_method)unsignedintmethod_count;struct _objc_methodmethod_list[3];} _OBJC_$_CATEGORY_INSTANCE_METHODS_MyClass_$_MyAddition __attribute__ ((used, section (__DATA,__objc_const))) = {sizeof(_objc_method),3, {{(structobjc_selector *)setName:, v24@0:8@16, (void *)_I_MyClass_MyAddition_setName_}, {(structobjc_selector *)name, @16@0:8, (void *)_I_MyClass_MyAddition_name}, {(structobjc_selector *)printName, v16@
您可能关注的文档
- 公司企业安全风险分级管控工作指南.doc
- 职业经理资质评价案例精选.doc
- [世界著名企业家名言]世界著名思想家.doc
- 中国上市公司融资结构与企业业绩的实证分析.doc
- 职业生涯规划书范文近期职业目标、中期职业目标、远期职业目标.doc
- 2018考研需了解的20个时间节点[权威资料].doc
- 职业生涯规划与大学生应有的素质.doc
- 基于矩阵式管理的企业研发人员绩效考核工作的思考.doc
- 加强财务管理,降低高速公路建设成本.doc
- 某公司薪资及激励方案(新).doc
- 智慧养老社区中的残疾人辅助技术创新.docx
- 2026年百色职业学院单招职业技能考试题库及答案详解(全国通用).docx
- 动物基因疫苗项目商业计划书 (15).docx
- 2025年小学高一年级语文古诗词鉴赏卷.docx
- 2026年百色职业学院单招职业技能考试题库及完整答案详解一套.docx
- 2026年百色职业学院单招职业技能考试题库及完整答案详解一套.docx
- 轻奢品牌全球化营销策略构建与路径分析.docx
- 2026年百色职业学院单招职业技能考试题库及完整答案详解一套.docx
- 2026年百色职业学院单招职业技能考试题库及参考答案详解一套.docx
- 2026年百色职业学院单招职业技能考试题库及完整答案详解一套.docx
最近下载
- (班子、个人)2025民主生活会“五个方面带头”对照检查材料(强化政治忠诚、固本培元、三个敬畏、干事创业、管党治党).docx VIP
- 医疗安全(不良)事件、纠纷(预警)记录本.pdf
- 1例大剂量甲氨蝶呤治疗儿童急性淋巴细胞白血病血药浓度异.PDF VIP
- 初中中考语文常考古诗文默写最全汇总(含答案) .pdf VIP
- 从融资租赁看城投区域风险.pdf VIP
- Yadea雅迪电动车DT3说明书用户手册.pdf
- 2025【跑步机控制系统的设计与实现13000字】.docx
- 2025至2030中国冷冻鸡胸肉行业运营态势与投资前景调查研究报告.docx VIP
- 变电站安装施工方案.docx
- 艺术作品的本源海德格尔.pdf
原创力文档

文档评论(0)