// 将类的实现方法代码反三到便于管理的数个分类之中.        // 类中经常容易填满各种方法, 而这些方法的代码则全部堆在一个巨大的实现文件中, 有时这么做事不合理的,因为即使通过重构把这个类打散, 效果也不会太好,        // 可以用 '分类'机制把刚才的类改写        // 例如    /*          #import@interface EOCPerson : NSObject    @property (nonatomic, copy, readly) NSString * firsrName;    @property (nonatomic, copy, readly) NSString * lastName;    @property (nonatomic, strong, readly) NSArray * friends;          - (id)initWithFirstName:(NSString *) firstName andlastName:(NSString *)lastName;          // Friendship methods    - (void)addFriend:(EOCPerson *)person;    - (void)removeFriend:(EOCPerson *)person;    - (void)isFriendsWith:(EOCPerson *)person;          // Work methods    - (void)performDaysWork;    - (void)takeVacationFromWork;              // Play methods    - (void)goToTheCinema;    - (void)goToSportsgame;          @end          */            // 在实现该类时, 所有方法的代码可能会写在一个大文件, 如果还向类中继续添加方法的话, 那么源代码文件就会越来越大, 变得难与管理., 所以说, 应该吧这样的类分成几个不同的部分,    // 例如, 可以用'分类'机制把刚才的类改写成下面的这样        /*          #import@interface EOCPerson : NSObject

@property (nonatomic, copy, readly) NSString * firsrName;

@property (nonatomic, copy, readly) NSString * lastName;

@property (nonatomic, strong, readly) NSArray * friends;

- (id)initWithFirstName:(NSString *) firstName andlastName:(NSString *)lastName;

@end

@interface EOCPerson (Friendship)

- (void)addFriend:(EOCPerson *)person;

- (void)removeFriend:(EOCPerson *)person;

- (void)isFriendsWith:(EOCPerson *)person;

@end

@interface EOCPerson (Work)

- (void)performDaysWork;

- (void)takeVacationFromWork;

@end

@ininterface EOCPerson (Play)

- (void)goToTheCinema;

- (void)goToSportsgame;

@end

*/

// 现在,类的实现代码按照方法分成了好几个部分, 所以说, 这项语言特性当然就叫做'分类'啦, 在本例中, 类的基本要素 都实现在'住实现'里, 执行不同类型的操作所用的另外几套方法则归入各个分类中.

// 使用分类机制之后, 依然可以把整个类定义在一个接口文件中, 并将其代码写在一个实现文件中. 可是,随着文件数量的增加, 当前这份试下文件很宽就变得更大了,此时可以把每个分类提取到各自的文件中.

// EOCPerson+Friendship(.h/.m)

// EOCPerson+Work(.h/.m)

// EOCPerson+Play(.h/.m)

// 比方说,与交友功能相关的那个分类可以这样写

/*

.h 文件

#import "EOCPerson.h"

@interface EOCPerson (Friendship)

- (void)addFriend:(EOCPerson *)person;

- (void)removeFriend:(EOCPerson *)person;

- (void)isFriendsWith:(EOCPerson *)person;

@end

.m文件

#implementation EOCPerson (Friendship)

- (void)addFriend:(EOCPerson *)person{

///////

}

- (void)removeFriend:(EOCPerson *)person{

///////

}

- (void)isFriendsWith:(EOCPerson *)person{

///////

}

@end

*/

// 通过分类机制, 可以把类代码分成很多个抑郁管理的小块, 以便单独检视, 使用分类机制之后, 如果想用分类中的方法, 那么记得在引入 EOCPerson.h 时一并引入分类的头文件.

最新文章

  1. HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
  2. [c++] Basic ideas and Style Guide
  3. nodejs: C++扩展
  4. Hive报错之java.sql.SQLException: Field 'IS_STOREDASSUBDIRECTORIES' doesn't have a default value
  5. linux系统:rm-rf执行以后,怎么办?我来教你恢复文件。
  6. 【夯实Mysql基础】记一次mysql语句的优化过程!
  7. SmartAdmin 打开速度慢的原因
  8. 【转】Android兼容性测试CTS --环境搭建、测试执行、结果分析
  9. <转载>如何解决子级用float浮动父级div高度不能自适应的问题
  10. HDOJ 2736 Surprising Strings
  11. nexus 中央仓库
  12. pthread创建线程的简单演示
  13. [Swift]LeetCode371. 两整数之和 | Sum of Two Integers
  14. jmeter连接oracle数据库配置
  15. iOS 键盘上方增加工具栏
  16. 【MongoDB】MongoDb的“not master and slaveok=false”错误及解决方法 mongo连接从库出现问题
  17. U3D学习08-异步、协程
  18. repo sync出现“fatal: '../platform/abi/cpp.git' does not appear to be a git repository”的解决方案
  19. Spring Security构建Rest服务-0400-使用切片拦截rest服务
  20. CVE-2013-0025

热门文章

  1. AngularJS 1.x系列:AngularJS过滤器(4)
  2. mysql-笔记-数据类型
  3. 16.kubernetes的RBAC
  4. jap篇 之 JSTL标签库
  5. python代码格式
  6. C#嵌入动态链接库到可执行文件
  7. CSS伪类整理笔记
  8. URL传递中文参数乱码问题
  9. jenkins拉源码设置参数化构建选项为tagname
  10. platform驱动分离