博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios category 笔记整理(一)
阅读量:7212 次
发布时间:2019-06-29

本文共 1242 字,大约阅读时间需要 4 分钟。

一入门篇

1 什么是category?

category可以用于为已有的类添加方法(只能添加方法不能添加属性)有点类似于继承,除此之外,apple还推荐了category的另外两个使用场景:**1.把类的实现分步在多个文件中,精简了单个文件的体积把类的实现按照功能分布在不同的文件中,同时也助于团队的开发,也可以按需加载所需的category。****2.声明私有方法 (如果不在接口中声明方法而只是在实现文件中直接实现一个方法用于完成在头文件中所给出的公共接口编译时会有警告,那么可以在.m文件的开头定义一个category并添加相应的方法从而消除编译的警告)****3.模拟多继承****4.framework私有方法公开****5.用于非正式协议(典型的例子是代理ios那些自带的代理几乎都是NSObject的类别,所以任何一个OC对象都可以成为代理,NSObject是OC对象的父类)**

2 category和extension的区别

extension在编译期间起作用,而category是在运行时动态添加的,所以category可以给(一般也是只给)未知源码的类(NSString)添加方法,而extension只能用于自己定义(即源码已知的)类添加方法。另外extension可以给类添加实例变量,但category无法添加实例变量。应为在运行期间对象的内存布局已经确定,如果添加实例变量就会破坏类的内存布局,这对编译型语言是灾难性的

3.category的底层面目

所有的OC类和对象,在runtime层都是用struct实现的category对应category_t

typedef  struct category_t{    const cahr*name;//类的名字    classref_ cls;//类    struct method_list_t* instanceMethods;//category中所有给类添加的实例方法的列表    Struct method_list_t*classMethod;//category中所有添加的类方法列表    Struct protocal_list_t *protocals;//category实现所有协议的列表    Struct property_list_t*instanceProperties;//category中添加的所有属性    }category_t4.实现一个categoryMyClass.h#import
@interface Myclass:NSObject-(void)printName;@end@interface Myclass(MyAddtion)@property(notamic ,copy)NSString *name;(这不是一个实例变量,只是一个属性,等效于设置了一个get和set方法)-(void)printName;@end

转载地址:http://zcgum.baihongyu.com/

你可能感兴趣的文章
如何彻底关闭windows update
查看>>
SpringMVC+SwfUpload进行多文件同时上传
查看>>
ASP.NET Core中的依赖注入(2):依赖注入(DI)
查看>>
Java_JAVA6动态编译的问题
查看>>
scala 日期格式转换
查看>>
Filtering Specific Columns with cut
查看>>
多线程编程1-NSThread
查看>>
反馈组态的判别
查看>>
【Web】Rest API 验证授权如何做?
查看>>
Swift 中的 @autoclosure
查看>>
多迪将企业的Python工程师定位成哪几类?
查看>>
Rom 检测
查看>>
【iOS工具】rvm、Ruby环境和CocoaPods安装使用及相关报错问题解决(2016 12 15 更新)...
查看>>
Weex学习指南
查看>>
TiDB DevCon 2019 报名开启:年度最高规格的 TiDB 技术大会
查看>>
React Native 初体验
查看>>
数据结构与算法 | 线性表 —— 链表
查看>>
Python3 websocket通信
查看>>
使用MarkDown画矩阵
查看>>
JavaScript函数式编程学习
查看>>