iOS -- Effective Objective-C 阅读笔记 (9)
// 将类的实现方法代码反三到便于管理的数个分类之中. // 类中经常容易填满各种方法, 而这些方法的代码则全部堆在一个巨大的实现文件中, 有时这么做事不合理的,因为即使通过重构把这个类打散, 效果也不会太好, // 可以用 '分类'机制把刚才的类改写 // 例如 /* #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 时一并引入分类的头文件.
iOS -- Effective Objective-C 阅读笔记 (9)的更多相关文章
- iOS Testing with Xcode 阅读笔记
官方文档直通车 Performance Testing A baseline is a combination of the average time performance in ten runs ...
- Effective Java, 3e阅读笔记一
引言 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库,适用于任何具有实际Java工作经验的程序员. 本书一共90个条目,12章,每个条目讨论一条规则,这些规则反映了最有经验的优秀程序员 ...
- QCon 2015 阅读笔记 - 其他精选主题
QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...
- QCon 2015 阅读笔记 - 移动开发最佳实践
所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...
- SDL源码阅读笔记(1) 基本模块
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 前言 对于大牛来说,写关于阅读源码的文章都会叫源码剖析或者深入浅出啥的,对于我,自己阅读阅读源码,写 ...
- 《STL源代码剖析》---stl_deque.h阅读笔记(2)
看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
随机推荐
- 2019微信公开课 同行With Us 听课笔记及演讲全文
[2019WeChat 微信公开课] 产品理念: 微信启动页 一个小人站在地球前面,每个人都有自己的理解和解读 所谓异类,表示与别人与众不同,即优秀的代名词. 微信的与众不同体现在尊重用户对产品的感受 ...
- BEX5下新建任务到待办任务
List<OrgUnit> list = new ArrayList<OrgUnit>(); // 1.查询出执行者 String sql = "select t.f ...
- [SimplePlayer] 1. 从视频文件中提取图像
在开始之前,我们需要了解视频文件的格式.视频文件的格式众多,无法三言两语就能详细分析其结构,尽管如此,ffmpeg却很好地提取了各类视频文件的共同特性,并对其进行了抽象描述. 视频文件格式,统称为co ...
- property与x.setter与x.deleter
#测试property,x.setter,x.deleter class Test1: def __init__(self): self.__private = "alex" @p ...
- Android的LinearLayout中orientation默认值为什么是HORIZONTAL
在一个偶然(闲着无聊)的过程中,突然非常好奇为什么LinearLayout在不指定排列方向为垂直(VERTICAL)时就得是水平方向(HORIZONTAL)排列的.产生这个疑问的时候脑子里蹦出来的第一 ...
- 【JVM】JVM垃圾收集器、垃圾收集算法、无用对象
Java 常见的垃圾收集器有哪些 实际上,垃圾收集器(GC,Garbage Collector)是和具体 JVM 实现紧密相关的,不同厂商(IBM.Oracle),不同版本的JVM,提供的选择也不同. ...
- 自定义一个IOC框架
要实现的功能: 将对象的实例化交给自定的ioc容器. 通过注解的方式对接口进行依赖注入 通过getBean("userName")方法那到对象,使用对象的方法 首先,创建一个对象, ...
- C++ Under the Hood
The original article is taken from http://msdn.microsoft.com/archive/en-us/dnarvc/html/jangrayhood.a ...
- 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')
解决14中csv用excel打开乱码的问题 ,其实就是在写csv的时候把 utf-8 改成 utf-8-sig open('zhihu.csv','w',newline='',encoding='ut ...
- JGUI源码:Accordion兼容IE8实现(3)
本来不考虑IE8,但是还是有部分客户用的XP,有不代表没有,尽量做一下兼容处理1.before,after,要使用:不能使用:: 2.阻止冒泡 function stopPropagation(e) ...