很多博客文章写到
非正式协议就是类别
,也对也不对?看完之后还是会犯迷糊。
下图拍自《圣经》
我们可以将一组方法声明为NSObject的分类,这称为非正式协议,或者称为简化协议。。。
非正式协议只是作为分类进行声明
,而没有实现
。实际上,分类中声明的方法即使没有实现,也可以编译执行,但是在发送消息时会出现运行时错误。
补充
类别
类别category,也叫分类,范畴。是OC中的一个灵活的类扩展机制,用于在不获悉、不改变原来代码的情况下往一个已经存在的类中添加方法。不能添加实例变量(成员变量);添加的属性,也不会自动生成实例变量。
协议
非正式协议是被声明为NSObject类的分类。非正式协议中声明的方法不一定要实现,编译时不能检查类对非正式协议的适用性,运行时不能检查类对非正式协议的适用性。只能确认是否实现了每个方法。
正式协议是以@protocol方式命名的方法列表,与非正式协议相比不同的是,它要求显示的采用协议。@required修饰的方法在遵守相应协议的类中是必须被实现的,不然编译器会告警;@optional修饰的方法在遵守相应协议的类中是否实现是可选的