博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 分类思想(1)
阅读量:7206 次
发布时间:2019-06-29

本文共 2109 字,大约阅读时间需要 7 分钟。

1.需求:如果对一个类在不更改代码的基础上要为它再扩充额外的方法可以使用继承和分类

2.分类

作用:可以在不修改原来类代码的基础上,给某一个类扩充一些对象方法或者类方法,因此一个类可以有多个分类

实现:分类也是类因此也有声明和实现,分类一般以要实现的功能或者模块命名

  • 声明:@interface 类名(分类名称) @end
  • 实现:@implementation 类名(分类名称) @end

3.注意

(1)在分类只能增加方法,不能增加成员变量,如果要增加成员变量的话该考虑用继承去实现

(2)在分类实现方法中可以访问类中的成员变量但是不能访问类中的属性@property

(3)在分类中可以重新实现原类中的方法,但会将原类中的方法覆盖而失效。因为在执行对象成员方法的时候会优先去分类中查找,然后再去原类中去查找,最后去父类   中去查找。但是一般不建议么做!

(4)如果一个类有多个分类,而且分类中有同名的方法那么最后编译的分类会将前面编译的分类覆盖而执行输出

4.总结:

依据分类这一思想:如果一个类中有很多实现功能的方法,那么可以将每一个功能方法单独写成分类,让具体的分类来管理具体的功能!这样的话如果其他类要实现同样功能就可以直接调用分类

在实际开发中一般不建议给自定义的类写分类,一般情况下都是为系统自带的类写分类 

举例:Peron类有两个分类Person+QM 和 Person+MM

/*********************** Person.h文件 **********************************/#import 
@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 
#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] 学习

为什么会输出分类Person+QM中的方法呢,这个和编译顺序有关系

 

 

 

转载于:https://www.cnblogs.com/QM80/p/3584453.html

你可能感兴趣的文章
追MM与Java的23种设计模式[转]
查看>>
线程 2
查看>>
[C#][控件]文本类控件
查看>>
[Multimedia][MPEG2]MPEG-2系统原理
查看>>
背包九讲(转)
查看>>
HDU5988 Coding Contest(浮点费用流)
查看>>
css3文字溢出显示省略号
查看>>
Rugy 茶余饭后
查看>>
Linux shell中运行命令后加上字符“&”的作用
查看>>
MySQL存储引擎对比
查看>>
[Android Pro] AsyncTaskLoader vs AsyncTask
查看>>
[Linux] du-查看文件夹大小-并按大小进行排序
查看>>
转:numpy数据集练习——鸢尾花数据集
查看>>
把wcf服务,改成restful方式,以及吐槽
查看>>
SpatiaLite 各版本数据库差异
查看>>
Python变量和数据类型
查看>>
HTML(二)选择器
查看>>
C++ 类模板的使用
查看>>
AJAX编程-封装ajax工具函数
查看>>
Common Lisp学习笔记(九)
查看>>