2016.9.5 OC 第七天 协议&&分类
OC没有多继承,为了完成多继承的效果,使用分类和协议
协议并不是一个真正的类,协议中只有方法,不能有实例变量
方法只有定义,没有实现。
协议:
正式协议:自定义,通过关键字@protocol创建的协议
两个关键字修饰方法:
@optional:其修饰的方法可实现,也可不实现 @required:必须要实现其修饰的方法
(如果没有关键字修饰,默认方法被@required所修饰)
非正式协议:分类、现在自定义的类
协议的声明:
@protocol 协议名称
…
…
协议可以遵循协议 @protocol 协议名称 <所要遵循协议的名称>
如果一个类遵循了协议,那么该类的子类也遵从了协议
协议不可以引用任何类,无类主义(Classless)
@interface Point<协议名称1>
一个类可以遵循多项协议 @protocol <协议名称1,协议名称2,协议名称3>
当对一个对象进行拷贝时,在要拷贝的目标类中实现copyWitnZone方法即可实现拷贝,一般情况下会让类遵从NSCoping协议,用来实现其方法
分类:一个类的组成部分(把方法区分声明)
就是类的一部分
只能添加方法,不能添加实例变量,可以为自定义类创建分类,也可以位系统框架类添加分类
定义:@interface 原类名(分类名)
@interface原类名(分类名)<协议名称>
一个类可以有很多分类,必须保证分类名称的唯一性
注意:1️⃣不允许创建分类与与继承某一个类同时出现
2️⃣分类可以重写类中方法,不建议这样写
3️⃣可以有多个分类
C++中的NULL:使用空指针调用函数,程序崩溃
OC中nil :使用空指针调用方法自动被忽略(程序没有崩溃)
BOOL类型;
C++:true false
OC: YES NO
SEL选择器
C++:特性
1、OC中没有引用&
2、OC中没有内联
3、OC中没有模板
4、OC中没有const
5、OC中没有操作符重载
6、OC中没有友元