iOS中分类Category和扩展Extension
平时用分类做什么?
- 声明私有方法
- 分解体积庞大的类文件
- 把framework 的私有方法公开化
- 运行时决议
- 可以为系统类添加方法
- 实例方法
- 类方法
- 协议
- 属性(只是声明get set 方法,并非添加变量)
注意
- 分类添加的方法可以“覆盖”原类的方法
- 同名分类方法谁能生效取决于编译顺序(最后被编译的分类,会被优先被生效)
- 名字相同的分类会引起编译报错
//根据“key”获取相应的值
id objc_getAssociatedObject(id object,const void * key)
//把值value 通过key 和相应的策略 policy(assign,weak等等)赋值给object
void objc_setAssociateObject(id object,const void * key,id value, objc_AssociationPolicy policy )
//根据传过来的对象移除所有与之相关联的对象
void objc_RemoveAssociateObjects(id object)
另注:关联对象的本质
关联对象由AssociationsManager管理并在AssociationsMapHash中储存。所有对象的关联内容都在同一个全局容器中
文章图片
关联对象的本质 扩展 什么时候用到扩展
- 声明私有属性
- 声明私有方法
- 声明私有成员变量
- 编译时决议
- 只能以声明的形式存在,实现 多数情况下寄生于宿主类的.m文件中
- 不能为系统类添加扩展
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理