1.创建类别
类别是一种为现有的类添加新方法的方式。通常会以“类别名+类别名称”的风格命名。
1.1类别的缺陷
类别有两个缺陷。第一是无法向类中添加新的实例变量。类别没有向空间容纳实例变量。第二个就是名称冲突,也就是类别中的方法与现有的方法重名。当发生名称冲突时,类别具有更高的优先级。你的类别方法将完全取代初始方法,导致方法无法不再可用。有些编程人员会在自己的类别方法中添加一个前缀,以确保不会发生名称冲突。
1.2类别的优势
在Coco中,类别主要有3个用途:将类的实现代码分散到多个不同文件或框架中,创建对私有方法的前向引用,以及及向对象添加非正式协议。
2.类扩展
特殊的类别:类扩展。这个类别的特点之一就是不需要名字。特点如下:
-正如我们之前指出的,它不需要名字。
-你可以在包含你的源代码的类(也就是你自己的类)中使用它。
-你可以添加实例变量。
-你可以将只读权限改成可读写的权限。
-创建数量不限。
3.非正式协议和委托类别
Cocoa中的类经曾会使用一种名为委托的技术,委托是一种对象,由另一个类请求执行某些工作。比方说,当在应用程序启动时,AppKit的NSAppliaction类会询问其委托对象是否应该打开一个无标题窗口。NSWindow类的对象会询问它们自己的委托对象是否允许关闭某个窗口。
最常见的情况是,编写委托对象并且将其提供给其他一些对象,通常是Cocoa框架中的对象。通过实现特定的方法,你可以控制Cocoa中对象的行为。
3.1委托和类别
委托强调类别的另一种应用:被发送给委托对象的方法可以声明为一个NSObject的类别。
创建一个NSObject的类别称为“创建一个非正式协议”。非正式协议只是一种表达方式,它表示“这里有一些你肯能希望实现的方法,你可以使用它们更好的完成工作”。
3.2响应选择器
选择器只是一个方法名称,但它以Objective-C运行时使用的特殊方式编码,以快速执行查询。可以使用@selector()编译指令圆括号中的方法名称来指定选择器。
小结:
利用类别可以声明非正式协议。非正式协议是NSObject的一个类别,他列出了对象可以响应的方法。非正式协议用于实现委托,委托是一种允许你轻松制定对象行为的技术。
选择器可以在代码中指定特定的Objective-C消息。