iOS开发

iOS 关于 category 和 extension 的探索

2021-04-08  本文已影响0人  BlackStar暗星

Demo地址
Demo中包含本人学习的所有资料,还有一些封装的Pod组件,欢迎下载Star,如果有错误的地方,还请指出,详情查看 README.md


一、category覆盖本类方法,不同类型的方法调用,他们的顺序可能不同

1、实例方法

如果 category 有一个方法,和本类方法相同,那么执行顺序是什么?

只会执行 category 方法

2、+(void)load 方法

如果 category 重写了 +(void)load 方法,那么会发生什么?

会先执行本类的 +load 方法,再执行 category+load 方法

3、工厂方法

既然 +(void)load 会先执行本类的 load 方法,在执行 categoryload 方法,那么作为一类的工厂方法,是否也是如此呢?

工厂化方法同实例方法相同,只会执行 category 的方法

二、category 和 extension 的异同点

category

示例:category在已存在的.h文件中声明
category在已存在的.h文件中声明

extension

如果将声明放在 .m 文件中,无论是 extension 还是 category ,都将是私有的, 那么 extension 已经满足所有需求,对于 category 就没有什么意义了,所以对于 category,声明还是应该放在.h文件中, 或者创建单独文件作为category

关于 class_copyIvarList 和 class_copyPropertyList 区别

验证:

以上结论,都可以通过class_copyIvarList class_copyPropertyList class_copyMethodList 来进行验证

更多细节请看测试 Demo 源码中 category 部分



附加:百度面试时问了一道题,问是否可以给 NSObject 添加分类,我说可以,但是面试官说不可以,我试验了下,是可以的,但是我觉得面试官应该不会错,那么可能有两个可能,一、我题目可能听错了 ;二、我研究的东西和他问的题,可能有出入。但是具体细节我已经回想不起来了

上一篇 下一篇

猜你喜欢

热点阅读