1: 在 既有类中使用 关联对象存放自定义数据

有时候需要在对象中存放相关信息, 这是我们经常会从对象所属的类中继承一个子类, 然后改用这个子类对象, 然而并非所有的情况下都能这么做,  有时候类的实例可能是由某种机制所创建的, 而开发者无法令这种机制创建出自己缩写的子类实例, OC  中有一项强大的特性可以解决此问题, 这就是 '关联对象'

2:在类继承体系中查询类型信息

isMemberOfClass: 能够判断出对象是否为某个特定类的实例, 而 isKindOfClass: 则能够判断出对象是否为某类 或 其派生类的实例, 例如;

NSMutableDictionary * dict = [NSMutableDictionary  new];

[dict isMemberOfClass: [NSDictionary  class]]; 为 NO

[dict isMemberOfClass: [NSMutableDictionary  class]]; 为 YES

[dict isKindOfClass: [NSDictionary  class]]; 为 YES

[dict isKindOfClass: [NSArray  class]]; 为 NO

总结:

每个实例都有一个指向 Class 对象的指针, 泳衣表明其类型, 而这些 Class 对象则构成了类的继承体系.

如果对象类型无法在编译期确定, 那么就应该使用类型信息查询方法来探知.

尽量使用类型信息查询方法来确定对象类型, 而不要直接比较类对象, 因为某些对象可能实现了消息转发功能.

3: 用前缀避免命名空间冲突

OC 没有其他语言那种内置的命名空间机制, 鉴于此, 我们在其名时要设法避免潜在的命名冲突.

避免此问题的唯一办法就是变相实现命名空间, 为所有名称都加上适当前缀, 所选前缀可以是与公司, 应用程序或二者皆有关联之名.

使用 Cocoa 创建应用程序时一定注意, Apple 宣称 其保留使用所有 '两字母前缀'的权利, 所以你自己选用的前缀应该是三个字母的.

不仅是类名, 应用程序中的所有名称都应加前缀, . 如果要为既有类新增 '分类', 那么一定要给 '分类'  及 分类 中的方法加上前缀,

总结:

选择与你的公司, 应用程序 或 二者皆有关联之名称作为类名的前缀, 并在所有的代码中均使用这一前缀.

若自己所开发的程序库中使用到了第三方库, 则应为其中的名称都加上 前缀.

4: 提供 ' 全能初始化方法 '

所有对象均瑶初始化, 在初始化时, 有些对象可能无需开发者想起提供额外信息. 不过一般还是要提供的. 我们把这种可为对象提供必要信息以便完成工作的初始化方法叫做  ' 全能初始化 '(指定初始化方法)

如果创建类实例的方式不止一种,, 那么这个类就会有多个初始化方法, 这当然很好, 不过仍然要在其中选定一个作为全能初始化方法, 令其他初始化方法都来调用它. 于是, 只有在全能初始化的方法中, 才会存储内部数据, 这样的话, 当地曾数据存储机制改变时, 只需修改全能初始化方法的代码即可. 无需改动其他初始化方法.

如果子类的全能初始化方法与超类方法的名称不同, 那么总应该覆写超类的全能初始化方法

总结:

在类中提供一个全能初始化方法, 并与文档中指明, 其他初始化方法均应调用此方法

若全能初始化方法与超类不同, 则需要覆写超类对应的方法

如果超类的初始化方法不使用子类, 那么应该覆写 这个超类方法, 并在其中抛出异常

iOS -- Effective Objective-C 阅读笔记 (6)的更多相关文章

  1. iOS Testing with Xcode 阅读笔记

    官方文档直通车 Performance Testing A baseline is a combination of the average time performance in ten runs ...

  2. Effective Java, 3e阅读笔记一

    引言 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库,适用于任何具有实际Java工作经验的程序员. 本书一共90个条目,12章,每个条目讨论一条规则,这些规则反映了最有经验的优秀程序员 ...

  3. QCon 2015 阅读笔记 - 其他精选主题

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...

  4. QCon 2015 阅读笔记 - 移动开发最佳实践

    所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...

  5. SDL源码阅读笔记(1) 基本模块

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 前言 对于大牛来说,写关于阅读源码的文章都会叫源码剖析或者深入浅出啥的,对于我,自己阅读阅读源码,写 ...

  6. 《STL源代码剖析》---stl_deque.h阅读笔记(2)

    看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...

  7. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  8. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  9. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  10. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

随机推荐

  1. GEC6818连接Ubuntu,下载程序至开发板

    使用  secure CRT连接开发板,可视化操作 连接成功 设置临时ip ubuntu 要跟 开发板同一网段: ip前三位相同 代码:sudo service tftpd-hpa restart 代 ...

  2. System.nanoTime与System.currentTimeMillis的区别(转)

    原文地址:http://blog.csdn.net/dliyuedong/article/details/8806868 平时产生随机数时我们经常拿时间做种子,比如用System.currentTim ...

  3. @deprecated 的方法处理

    因为需要用到poi,偷懒不太想看官方文档,同时自己的github账号忘记密码了.所以直接在别人博客那拷贝一段代码来模仿修改创建HSSF的xsl文件. 虽然能运行,但发现代码太多横线,可以知道方法被标注 ...

  4. python多线程和多进程

    1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发 ...

  5. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

  6. Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块

    StringIO StringIO操作 BytesIO BytesIO操作 file-like对象 路径操作 路径操作模块 3.4版本之前:os.path模块 3.4版本开始 建议使用pathlib模 ...

  7. ABP中的模块初始化过程(一)

    在总结完整个ABP项目的结构之后,我们就来看一看ABP中这些主要的模块是按照怎样的顺序进行加载的,在加载的过程中我们会一步步分析源代码来进行解释,从而使自己对于整个框架有一个清晰的脉络,在整个Asp. ...

  8. CSS之样式属性(背景固定、圆形头像、模态框)

    CSS属性 一.宽和高 width属性可以为元素设置宽度. height属性可以为元素设置高度. 块级标签才能设置宽度,内联标签的宽度由内容来决定. div {width: 1000px;backgr ...

  9. 【洛谷P3605】晋升者计数

    题目大意:给定一棵 N 个点的树,点有点权,求对于每个点来说,以该点为根的子树内比该点点权小的点的个数. 题解:考虑对于每个点开一棵权值线段树.递归过程中,将子树的信息合并到父节点上,统计答案后,再将 ...

  10. WS_TABSTOP 与 BS_DEFPUSHBUTTON 第一次使有

    关于 WS_TABSTOP,我一直没搞明白,为何加了 WS_TABSTOP ,当按下 Tab 键时,窗口中的控件还是不能自动的切换焦点. 为何 SetFocus(hwnd); 后,虽然按钮已获得焦点, ...