protocal 协议:
协议事实上是一组方法列表,不依特定的类。使用协议可以使不同的类共享相同的消息。
协议的定义:
@protocal 协议名
方法声明; 默认的情况下,这个方法是必须要被实现的
@optional 方法声明; 这个是可选择实现的方法
@required 方法声明; 必须实现的方法
@end
协议在类中的声明:
@interface 类名:父类名<协议名>
xxxxx
@end
有的网友说协议很像Java中的接口,也有的人说是Java中的接口与泛型的结合体。好吧,不熟悉Protocal呢,但是个人感觉更倾向第一种说法。
但protocal与Java 中的interface不同在于方法不是必须实现的。
参考(看一下协议实现的不同方式):http://blog.csdn.net/a352193394/article/details/8100248
Category 分类:
重点参考:http://bbs.itheima.com/thread-117162-1-1.html
Category依赖具体的类。Category的作用就是对已有的类的扩展,就像在一个类上面外挂一个模块(让我想起了美国军舰模块化设计、生产,果然这些思想都是相通的)。
Category的声明:
@interface 类名(分类名)
新增方法的声明
@end
定义方法
@implementation 类名(分类名)
新增方法的定义{
xxxxxx
}
@end
调用的时候与类中方法调用一样。
Category注意点:
1 分类只能增加方法,不能增加成员变量;
2 在分类方法的实现中可以访问原来类中的成员变量;
3 分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(所以我们最好不要在Category中重载);
4 方法调用优先级:匪类->原来的类->父类;
5 一个类可以定义多个Category,但,如果不听的Category中存在相同的方法,编译器无法决定使用哪个Category;
6 Category是可以被继承的;