1. 分类 :Categories
-> modularise the definition of a class into groups or categories of related methods.
-> extend an existing class definition
应用场景: 1.为自定义的类,添加新方法时, 2.为库中的类(比如NSArray)扩展方法
分类的作用:可以将类的定义模块化到相关方法的组或分类中,它还提供了扩展现有类定义的简便方式,并且不必访问类的源代码,也无须创建子类。
分类的定义:
接口部分
@interface 类名 (分类名)
需要添加的方法
@end
实现部分
@implementation 类名 (分类名)
方法的具体实现
@end
2.协议和代理 :Protocols and Delegation
协议的定义: 协议是多个类共享的一个方法列表,协议中列出的方法没有相应的实现,协议中列出的一组方法,@required 是必须实现的,@optional是选择实现。
@protocol 协议名称
@required
声明一些必须实现的方法
@optional
声明一些可选的方法
@end
如果你希望你的某个类采用协议,
可以通过在@interface行的父类名称后用一对尖扣号(<协议名>)内列出协议名称
可以使用 conformsToProtocol:方法检查一个对象是否遵循某项协议
协议是一种两个类之间的接口定义。定义了协议的类可以看作是将协议定义的方法代理了给实现它们的类