category 复习

一、Category 的使用场合

  1. 主要作用是为已经存在的类添加方法。

  2. 一个类中的代码非常多,如果超过1000多行,那么在翻阅的时候也会觉得很困难,但是继承下来,再使用的时候,只能集成子类,而且方法比较多,想要直接分散开来,不是特别容易,所以可以采取分类的方式,把想通类型的代码加载在一起。

    好处:可以把类的实现分开在几个不同的文件里面。这样做有几个显而易见的好处,
     a)可以减少单个文件的体积
    
     b)可以把不同的功能组织到不同的category里
    
     c)可以由多个开发者共同完成一个类
    
     d)可以按需加载想要的category 等等。
    
    并且 还可以按照需要加载想要的category。
    

二、Category实现原理

Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息
在程序运行的时候,runtime会将Category的数据,合并到类信息中(类对象、元类对象中)

三、Category与Extension的区别

Class Extension在编译的时候,它的数据就已经包含在类信息中
Category是在运行时,才会将数据合并到类信息中

四、 Category中有load方法吗?load方法是什么时候调用的?load 方法能继承吗?

有load方法
load方法在runtime加载类、分类的时候调用
load方法可以继承,但是一般情况下不会主动去调用load方法,都是让系统自动调用

五、 load、initialize方法的区别什么?它们在category中的调用的顺序?以及出现继承时他们之间的调用过程?

1.调用方式:

  1. load是根据函数地址直接调用
  2. initialize 是通过objc_msgSend 调用

2.调用时刻:
1. load是 runtime加载类、分类的时候调用(只会调用一次)
2. initialize是类第一次接收到消息时调用, 每一个类只会initialize一次(父 类的initialize方法可能会被调用多次)

load,intiallize的调用顺序:
1.load
1.先调用类的load,
2. 先编译的类,优选调用load
3.调用子类的load之前,会先调用类的load

2.initialize
1.先初始化父类
2.再初始化子类(父类可能会被多次调用intiallize)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值