Objective-C(七、分类和延展)——iOS开发基础
2015-07-01 21:05
811 查看
结合之前的学习笔记以及参考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~
七、分类和延展
1、分类(范畴,类目,类别……)
(1)创建方式:File New -> OS X -> Source -> Objective-C File -> Category+FileName+Class(Xcode6.3)
(2)作用:在不修改原始类模型的基础上,给某个类扩充方法。分类提供简单的方式将类的定义模块化到相应地分类中,不需要创建子类就可以扩充方法
(3)语法:(假设给NSObject类添加Sort排序分类)
命名规则:“原始类+分类名”,在新建时输入分类名Sort,系统会自动生成“NSObject+Sort.h”“NSObject+Sort.m”
声明:NSObject+Sort.h
实现:NSObject+Sort.m
(4)分类的优点
a、一个庞大的类可以
b、在不修改原始类的基础上扩充方法;
c、不创建子类就能够进行当前类的方法扩充
(5)使用注意要点
a、分类只能扩充方法,不能扩充成员变量(要扩充用继承);
b、在分类方法中可以访问原始类中定义的成员变量;
c、分类允许重定义原始类中的方法,会覆盖原始类的方法,导致原方法不可用,不建议重定义;
d、当原始类,不同分类中有相同方法时,只有最后编译的有效
编译顺序查看:双击
方法调用顺序:分类(最后参与编译的分类优先)——>原始类
2、延展(extension) 本质是分类
(1)语法
(2)作用:
a、在.m中,作私有方法的声明,同时实现方法(私有方法命名方法名前加下划线);
在Student.m中
b、在.h中,按照功能模块进行区分,方便阅读和查找;
Student.h文件中
c、在foundation框架中经常使用此语法,方法是公有的,例如NSString.h,NSArray.h
七、分类和延展
1、分类(范畴,类目,类别……)
(1)创建方式:File New -> OS X -> Source -> Objective-C File -> Category+FileName+Class(Xcode6.3)
(2)作用:在不修改原始类模型的基础上,给某个类扩充方法。分类提供简单的方式将类的定义模块化到相应地分类中,不需要创建子类就可以扩充方法
(3)语法:(假设给NSObject类添加Sort排序分类)
命名规则:“原始类+分类名”,在新建时输入分类名Sort,系统会自动生成“NSObject+Sort.h”“NSObject+Sort.m”
声明:NSObject+Sort.h
#import <Foundation/Foundation.h> @interface NSObject (Sort) //分类中不能添加成员变量 //{ // NSInteger _num; //} //报错:instance variables may not be placed in categories //扩充方法的声明 - (void)methodA; - (void)methodB; @end
实现:NSObject+Sort.m
#import "NSObject+Sort.h" @implementation NSObject (Sort) //扩充方法的实现 - (void)methodA { } - (void)methodB { } @end
(4)分类的优点
a、一个庞大的类可以
分功能模块进行开发,思路更清晰,多人开发,利于团队合作;
b、在不修改原始类的基础上扩充方法;
c、不创建子类就能够进行当前类的方法扩充
(5)使用注意要点
a、分类只能扩充方法,不能扩充成员变量(要扩充用继承);
b、在分类方法中可以访问原始类中定义的成员变量;
c、分类允许重定义原始类中的方法,会覆盖原始类的方法,导致原方法不可用,不建议重定义;
d、当原始类,不同分类中有相同方法时,只有最后编译的有效
编译顺序查看:双击
方法调用顺序:分类(最后参与编译的分类优先)——>原始类
2、延展(extension) 本质是分类
(1)语法
@interface 类名 () //括号里可写可不写 //方法声明 @end
(2)作用:
a、在.m中,作私有方法的声明,同时实现方法(私有方法命名方法名前加下划线);
在Student.m中
#import "Student.h" @interface Student (p1) //括号可写可不写,名字自己取 - (void) _showInfo; @end //可写多个 @interface Student (p2) //括号可写可不写,名字自己取 - (void) _showInfo2; @end @implementation Student //私有方法实现 - (void)_showInfo { // XXX; } - (void)_showInfo2 { // XXXX; } @end
b、在.h中,按照功能模块进行区分,方便阅读和查找;
Student.h文件中
#import <Foundation/Foundation.h> @interface Student : NSObject { //XXX; } - (void)methodA; @end @interface Student (p) //括号可写可不写,名字自己取 - (void) showInfo; //公有方法,在.m中实现 @end
c、在foundation框架中经常使用此语法,方法是公有的,例如NSString.h,NSArray.h
相关文章推荐
- OC基础3:一些基本概念
- [Objective-C] BOOL类型
- Java NIO框架Netty教程(九) Object对象编/解码
- Java NIO框架Netty教程(十) Object对象的连续收发解析分析
- Java NIO框架Netty教程(八) Object对象传递
- Eclipse UML 工具 ObjectAid 介绍
- 黑马程序员——Objective-C语言知识整理——构造方法相关知识总结
- 黑马程序员——Objective-C语言知识整理——匿名类与self/super关键字
- AS3 复制Object
- Objective-C的Runtime System
- Objective-C中@property的所有属性详解
- [Objective-C] 通过匿名category给category添加成员变量
- [Objective-C] 使用Category给类添加private方法
- Objective-C语法之KVC使用
- [Objective-C] 为什么Objective-C不支持类的私有方法
- PageObject模式
- JSONObject和JSONArray的排序
- Objective-C(六、消息发送机制,选择器和SEL类型)——iOS开发基础
- javascript 的对象(Object)
- Flex warning: unable to bind to property 'name' on class 'Object' (class is not an IEventDispatcher)