去年,我在微博上发起了100天阅读博文的行动。具体就是,每天读一篇 iOS 开发相关的技术博文,并在微博上分享自己的读后感。对于在开发、工作、和面试中常见的问题,通过这段时间...

去年,我在微博上发起了100天阅读博文的行动。具体就是,每天读一篇 iOS 开发相关的技术博文,并在微博上分享自己的读后感。对于在开发、工作、和面试中常见的问题,通过这段时间...
第二十条:为私有方法名加前缀 【要点】 给私有方法的名称加上前缀,这样可以很容易的将其同公开方法区分开。 不要单用一个下划线做私有方法的前缀,因为这种做法是预留给苹果公司的。
第十九条:使用清晰而协调的命名方式 【要点】 起名时应遵从标准的Objective-C命名规范,这样创建出来的接口更容易为开发者所理解。 方法名要言简意赅,从左至右读起来要像...
第十八条:尽量使用不可变对象 设计类的时候,应充分运用属性来封装数据。 在使用属性时,则可将其声明为“只读”。 默认情况下,属性是“既可读又可写的”,这样设计出来的类都是“可...
第十七条:实现description方法 测试程序时,经常需要打印并查看对象信息。 最常用的做法是: NSLog(@“object = %@“,object); 在构建需要打...
第十六条:提供“全能初始化方法” 我们把这种可为对象提供必要信息以便其能完成工作的初始化方法叫做“全能初始化方法”(designated initializer)。 如果创建...
第十五条:用前缀避免命名空间冲突 Objective-C没有其他语言哪种内置的命名空间(namespace)机制。 避免命名冲突的唯一办法就是变相实现命名空间:为所有名称都加...
第十四条:理解“类对象”的用意 前面介绍了消息转发的机制。然而,消息的接收者究竟是何物? 是对象自身吗? 运行期系统如何知道某个对象的类型呢? 对象类型并非在编译期就绑定好了...
第十三条:用“方法调配技术“调试”黑盒方法“ 在消息解析时,与给定的选择子名称相对应的方法是不是也可以在运行时改变呢? 没错,就是这样。 若能善用此特性,则可发挥出巨大优势,...
第十二条:理解消息转发机制 上一条我们说了对象的消息传递机制很重要,那么问题来了----对象在收到无法解读的消息之后会发生什么呢? 若想令类能理解某条消息,我们必须以程序码实...
第十一条:理解objc_msgSend的作用 对象调用方法是Objective-C中经常使用的功能。用Objective-C的术语来说叫“传递消息”(passing a me...
第十条:在既有类中使用关联对象存放自定义数据 有时需要在对象中存放相关信息。 这时我们通常会从对象所属的类中继承一个子类,然后改用这个子类对象。 并非所有的情况下都能这么做,...
第九条:以“类族模式”隐藏实现细节 “类族”(class cluster)是一种很有用的模式(pattern),可以隐藏“抽象基类”(abstract base class)...
第八条 :理解“对象等同性”这一概念 根据“等同性“(equality)来比较对象是一个非常有用的功能。 不过按照”==“操作符比较出来的结果未必是我们想要的,因为该操作比较...
第七条 :在对象内部尽量直接访问实例变量 在对象之外访问实例变量是,总是应该通过属性来做,那么在对象内部访问实例变量时又该如何呢? 除了几种特殊情况外,在对象内部读取实例变量...
第六条:理解“属性”这一概念 “属性”(property)是Objective-C的一项特性,用于封装对象中的数据。 Objective-C对象通常会把其所需的数据保存为各种...
第五条:用枚举表示状态、选项、状态码 系统框架中频繁用到此类型,而开发者容易忽视它。在以一系列常量来表示错误状态码或可组合的选项时,极宜使用枚举为其命名。 枚举是一种常量命名...
第四条:多用类型常量,少用#define预处理指令 使用#define定义的常量没有类型信息 使用const static 定义的常量是带有类型信息的 不要用预处理指令定义常...
第三条:多用字面量语法,少用与之等价的方法 字符串字面量 语法如下:NSString *someString = @“Effective Objective-C 2.0”; ...
第二条:在类的头文件中尽量少引入其他头文件 一般来说,应在某个类的头文件中使用“向前声明”类提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合(co...