1. 类目(Category)
类目: 又称"分类", 为已知的类(系统或自己创建的类)添加新的方法
1.1 类目的创建
1->创建一个Objc-C文件
2->给分类起名字, 以及选择要被添加方法的类
这里, 我想给字典添加几个方法, 目的是让他可以便捷的通过Json解析得来
这样就生成了一对文件, 文件名格式是 ("已知的类"+"分类功能")
3->编写代码, 完成功能
同正常的类一样, 我们在.h文件中声明方法, 在.m中实现方法
1.2 类目的作用
1->团队开发, 多人开发同一个类, 互不影响
2->在想给某个系统类添加方法, 但获取不到原有类的实现文件
1.3 注意:
1->类目一般情况下是不可以添加属性的, 只能添加方法. 如果强行声明一个属性, 即使在应用时点语法可以获取到, 但最后也会crash. 这种添加方法只会对应生成getter, setter方法, 并没有生成对应的成员变量(但是通过runtime, 我们可以完美解决 Category不可添加属性 这个缺点)
2->类目中方法不能与原类中方法重名, 否则就是重写, 会覆盖
2. 延展(Extension)
延展: 给一个类添加私有变量和私有方法
2.1 创建延展
延展的创建有两种方法, 一种跟Category创建方法类似, 再创建一个文件. 另一种方法则是在自己创建的类的实现文件(即.m文件)中创直接创建
2.1.1 在原有类的实现文件中直接声明
@interface类名() // 从此处开始为延展的声明
{
私有的变量名
}
私有的方法
@end // 到此 延展声明结束
2.1.2 创建一个新类, 来声明属性和方法
1-> 同样, 先创建Obj-C文件
2-> 起名, 及选择要被添加延展的类
原有的UserInfo中有 userName, userId和userPhoto三个属性, 但是由于功能迭代, 另一个页面有需要再userInfo原有的属性中再增加两个属性userLocation, userTel
这样, 就生成了一个新的类 (原有类名_所起延展名)
3-> 添加属性, 或方法
3. 协议(Protocol)
1-> 协议: 严格声明一个方法列表
2-> 方法分类: @required 必须实现的方法
@optional 非必须实现的方法
3.1 创建协议
同Extension一样, Protocol的创建也有两种方法, 当前文件中创建, 新建文件创建
3.1.1 在当前类中创建
@protocol PushProtocol
@required
- (void)pushAction;
@optional
- (void)pushAction_1;
@end
3.1.2 新建类创建
1->创建Obj-C文件
2->选择Protocol
3->生成一个protocol文件
这里我想在一个自定义的控件里面, 通过点击方法, 是当前的Controller跳转到下级页面, 但是一个继承于View的类, 不能push页面, 所以就需要用委托所在的controller来跳转
3.2 用途
当某一个类无法完成某一个操作, 需要其他的类来替他完成, 此时就需要协议来委托他人完成
3.3 协议的弊端
协议中不能声明属性, 只可声明方法