iOS 分类思想(1)
2014-03-25 10:22
316 查看
1.需求:如果对一个类在不更改代码的基础上要为它再扩充额外的方法可以使用继承和分类
2.分类
作用:可以在不修改原来类代码的基础上,给某一个类扩充一些对象方法或者类方法,因此一个类可以有多个分类
实现:分类也是类因此也有声明和实现,分类一般以要实现的功能或者模块命名
声明:@interface 类名(分类名称) @end
实现:@implementation 类名(分类名称) @end
3.注意
(1)在分类只能增加方法,不能增加成员变量,如果要增加成员变量的话该考虑用继承去实现
(2)在分类实现方法中可以访问类中的成员变量但是不能访问类中的属性@property
(3)在分类中可以重新实现原类中的方法,但会将原类中的方法覆盖而失效。因为在执行对象成员方法的时候会优先去分类中查找,然后再去原类中去查找,最后去父类 中去查找。但是一般不建议么做!
(4)如果一个类有多个分类,而且分类中有同名的方法那么最后编译的分类会将前面编译的分类覆盖而执行输出
4.总结:
依据分类这一思想:如果一个类中有很多实现功能的方法,那么可以将每一个功能方法单独写成分类,让具体的分类来管理具体的功能!这样的话如果其他类要实现同样功能就可以直接调用分类
在实际开发中一般不建议给自定义的类写分类,一般情况下都是为系统自带的类写分类
举例:Peron类有两个分类Person+QM 和 Person+MM
输出:
2014-03-06 14:07:04.281 分类[898:303] 执行分类 Person+QM 中的test方法
2014-03-06 14:07:04.282 分类[898:303] 学习
为什么会输出分类[b]Person+QM中的方法呢,这个和编译顺序有关系[/b]
2.分类
作用:可以在不修改原来类代码的基础上,给某一个类扩充一些对象方法或者类方法,因此一个类可以有多个分类
实现:分类也是类因此也有声明和实现,分类一般以要实现的功能或者模块命名
声明:@interface 类名(分类名称) @end
实现:@implementation 类名(分类名称) @end
3.注意
(1)在分类只能增加方法,不能增加成员变量,如果要增加成员变量的话该考虑用继承去实现
(2)在分类实现方法中可以访问类中的成员变量但是不能访问类中的属性@property
(3)在分类中可以重新实现原类中的方法,但会将原类中的方法覆盖而失效。因为在执行对象成员方法的时候会优先去分类中查找,然后再去原类中去查找,最后去父类 中去查找。但是一般不建议么做!
(4)如果一个类有多个分类,而且分类中有同名的方法那么最后编译的分类会将前面编译的分类覆盖而执行输出
4.总结:
依据分类这一思想:如果一个类中有很多实现功能的方法,那么可以将每一个功能方法单独写成分类,让具体的分类来管理具体的功能!这样的话如果其他类要实现同样功能就可以直接调用分类
在实际开发中一般不建议给自定义的类写分类,一般情况下都是为系统自带的类写分类
举例:Peron类有两个分类Person+QM 和 Person+MM
/*********************** Person.h文件 **********************************/ #import <Foundation/Foundation.h> @interface Person : NSObject { int _personCount; } @property int personCount; - (void)test; @end
/*********************** Person.m文件 **********************************/ #import "Person.h" @implementation Person - (void)test { NSLog(@"执行原类 Person 中的test方法"); } @end
/*********************** Person+QM.h文件 **********************************/ #import "Person.h" @interface Person (QQ) - (void)study; - (void)test; @end
/*********************** Person+QM.m文件 **********************************/ #import "Person+QM.h" @implementation Person (QQ) - (void)study { NSLog(@"学习"); } // 将原来Person的test覆盖 - (void)test { NSLog(@"执行分类 Person+QM 中的test方法"); } @end
/*********************** Person+MM.h文件 **********************************/ #import "Person.h" @interface Person (MM) - (void)test; @end
/*********************** Person+MM.m文件 **********************************/ #import "Person+MM.h" @implementation Person (MM) - (void)test { NSLog(@"执行分类 Person+MM.h 中的test方法"); } @end
/*********************** main.m文件 **********************************/ #import <Foundation/Foundation.h> #import "Person+QM.h" #import "Person.h" int main(int argc, const char * argv[]) { Person *person = [[Person alloc] init]; [person test]; [person study]; return 0; }
输出:
2014-03-06 14:07:04.281 分类[898:303] 执行分类 Person+QM 中的test方法
2014-03-06 14:07:04.282 分类[898:303] 学习
为什么会输出分类[b]Person+QM中的方法呢,这个和编译顺序有关系[/b]
相关文章推荐
- iOS 分类思想(2)
- iOS 分类思想(1)
- iOS的文件分类、存放路径及文件属性
- IOS开发中的几种设计模式介绍(思想)
- IOS开发系列--Objective-C之协议、代码块、分类
- iOS 中 Base64 编解码分类实现
- 苹果App Store开发者帐户从申请,验证,到发布应用(2) 分类: ios相关 app相关 2015-04-03 11:57 167人阅读 评论(0) 收藏
- iOS开发UITableView基本使用方法总结 分类: ios技术 2015-04-03 17:51 68人阅读 评论(0) 收藏
- 中间件技术的思想 概念 分类及面临问题
- IOS 分类(category)、扩展(Extension)和继承(inheritance)的区别?
- iOS开发网络篇—网络编程基础 分类: ios开发 2015-01-21 19:24 140人阅读 评论(0) 收藏
- iOS开发中常用的分类方法---UIImage+extension
- 分类管理 商品管理 订单管理 权限校验(AOP思想) 网上商城(五)
- ios 分类(Category)
- IOS之富文本编辑 分类: ios技术 2015-03-06 22:51 89人阅读 评论(0) 收藏
- HUST 1698 - 电影院 组合数学 + 分类思想
- 详解Objective-C的meta-class 分类: ios相关 ios技术 2015-03-07 15:41 51人阅读 评论(0) 收藏
- iOS开发之使用UICollectionView实现美团App的分类功能【偶现大众点评App的一个小bug】
- iOS 分类之UIColor+Hex
- 黑马程序员—IOS加强视频—分类