(高质量代码专栏)第二章-2
来源:互联网 发布:陕西水利预算软件 编辑:程序博客网 时间:2024/05/17 19:19
--对象消息运行期
第一条:理解“对象等同性”这一概念
按照===操作符比较的结果是,判断两个指针本身,而不是指针所知的对象
NSObject对象存在两个判断对象相等的方法
- (BooL) isEqual:(id)object;
- (NSUInteger)hash;
如果是字符串的话,我们尽量使用isEqualToString方法这个事字符串特有,比isEqual效率高
NSObject类对这两个方法的默认实现是:当且仅当其“指针值”完全相等时,这两个对象才相等。若想要在自定义的对象中正确覆写这些方法,就必须先理解其约定。如果“isEqual:”方法判断两个对象相等,那么其hash方法也必须返回同一个值。但是,如果两个对象的hash方法返回同一个值,那么“isEqual:”方法未必就会认为两者相等。
还有数组和字典也有相应的方法“isEqualToArray”和“isEqualToDictionary”
等同性判断的深度执行
对于数组而言系统都是先判断数组对象是否相等,然后逐个判断数组内的元素是否相等
这对我们自定义对象而言,如果我们的对象存在主键的话,我们可以只判断主键是否相等即可判断两个相同类型的对象是否相等
容器中可变类的等同性
把某对象放入容器之后改变其内容将会造成不可测的后果,并不是说绝对不能这么做,但是说如果真要这么做的话,那就得注意其隐患,并用相应的代码处理可能发生的问题。
打个比方,set是不允许两个相等的对象存在的,如果你试试用一个数组加入到set中,然后在加入另外一个数组,逐个数组只有前一个数组的一半元素,好了这下没问题,但是如果你再把剩下的元素添加到后面的这个数组中,结果居然可以使一个set同时存在两个相同的数组,这本身就是错的
第二条:以“类族模式”隐藏实现细节
- (高质量代码专栏)第二章-2
- (高质量代码专栏)第二章
- (高质量代码专栏)第一章
- 代码大全_第二部分: 创建高质量的代码
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 七、高质量的子程序
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 八、防御式编程
- 编写高质量的代码(2)
- 阅读《编写高质量代码》心得(2)
- 编写高质量代码(2)
- 编写高质量代码规范2
- 编写高质量代码之读书笔记2
- 高质量的代码(2)
- 编写高质量代码
- 高质量代码
- 高质量代码
- 高质量Android 代码
- 高质量代码风格
- 编写高质量代码
- java代码原则,对象尽可能晚创建,尽可能早销毁
- 在Cocos2d-x中使用SQLite数据库
- 稀疏矩阵-三元组
- 设置圆形按钮
- jeewx 微信管家 - 举办商业版本免费试用活动
- (高质量代码专栏)第二章-2
- 第十二周项目三用递归方法求解(6)
- jtt809加密算法
- MySQL
- Cannot generate SSPI context.
- Android编译,打包、签名详细教程
- 去除unity3d的splash页面(remove unity3d splash image),在android中。
- mfc关闭js弹出框
- 场景切换,菜单界面