2014年5月 的存档

第7条:在对象内部尽量直接访问实例变量

  在对象之外访问实例变量时,总是应该通过属性来做,然而在对象内部访问实例变量时又该如何呢?Objective-C的开发者们一直在激烈争论这个问题。有的人认为,无论什么情况,都应该通过属性来访问实例变量;也有人说,“通过属性访问”与“直接访问”这两种做法应该搭配着用。除了几种特殊情况之外,笔者强烈建议大家在读取实例变量的时候采用直接访问的形式,而在设置实例变量的时候通过属性来做。
   阅读更多…

第6条:理解“属性”这一概念(3)

  在实现这个自定义的初始化方法时,一定要遵循属性定义中宣称的“copy”语义,因为“属性定义”就相当于“类”和“待设置的属性值”之间所达成的契约。初始化方法的实现代码可以这样写:
阅读更多…

第6条:理解“属性”这一概念(2)

  前述语法会将生成的实例变量命名为_myFirstName与_myLastName,而不再使用默认的名字。一般情况下无须修改默认的实例变量名,但是如果你不喜欢以下划线来命名实例变量,那么可以用这个办法将其改为自己想要的名字。笔者还是推荐使用默认的命名方案,因为如果所有人都坚持这套方案,那么写出来的代码大家都能看得懂。
阅读更多…

第6条:理解“属性”这一概念(1)

第2章 对象、消息、运行期

  用Objective-C等面向对象语言编程时,“对象”(object)就是“基本构造单元”(building block),开发者可以通过对象来存储并传递数据。在对象之间传递数据并执行任务的过程就叫做“消息传递”(Messaging)。若想编写出高效且易维护的代码,就一定要熟悉这两个特性的工作原理。
  当应用程序运行起来以后,为其提供相关支持的代码叫做“Objective-C运行期环境”(Objective-C runtime),它提供了一些使得对象之间能够传递消息的重要函数,并且包含创建类实例所用的全部逻辑。在理解了运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。
阅读更多…

第5条:用枚举表示状态、选项、状态码(2)

  系统库中频繁使用这个办法。iOS UI框架中的UIKit里还有个例子,用枚举值告诉系统视图所支持的设备显示方向。这个枚举类型叫做UIInterfaceOrientationMask,开发者需要实现一个名为supportedInterfaceOrientations的方法,将视图所支持的显示方向告诉系统:
阅读更多…

第5条:用枚举表示状态、选项、状态码(1)

  由于Objective-C基于C语言,所以C语言有的功能它都有。其中之一就是枚举类型:enum。系统框架中频繁用到此类型,然而开发者容易忽视它。在以一系列常量来表示错误状态码或可组合的选项时,极宜使用枚举为其命名。由于C++11标准扩充了枚举的特性,所以最新版系统框架使用了“强类型”(strong type)的枚举。没错,Objective-C也能得益于C++11标准。
  枚举只是一种常量命名方式。某个对象所经历的各种状态就可以定义为一个简单的枚举集(enumeration set)。比如说,可以用下列枚举表示“套接字连接”(socket connection)的状态:
阅读更多…

第4条:多用类型常量,少用#define预处理指令

  编写代码时经常要定义常量。例如,要写一个UI视图类,此视图显示出来之后就播放动画,然后消失。你可能想把播放动画的时间提取为常量。掌握了Objective-C与其C语言基础的人,也许会用这种方法来做:

#define ANIMATION_DURATION 0.3

  上述预处理指令会把源代码中的ANIMATION_DURATION字符串替换为0.3。这可能就是你想要的效果,不过这样定义出来的常量没有类型信息。“持续”(duration)这个词看上去应该与时间有关,但是代码中又未明确指出。此外,预处理过程会把碰到的所有ANIMATION_DURATION一律替换成0.3,这样的话,假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,其ANIMATION_DURATION都会被替换。
   阅读更多…

第3条:多用字面量语法,少用与之等价的方法(2)

  在改用字面量语法来创建数组时就会遇到这个问题。下面这段代码分别以两种语法创建数组:
阅读更多…

第3条:多用字面量语法,少用与之等价的方法(1)

  编写Objective-C程序时,总会用到某几个类,它们属于Foundation框架。虽然从技术上来说,不用Foundation框架也能写出Objective-C代码,但实际上却经常要用到此框架。这几个类是NSString、NSNumber、NSArray、NSDictionary。从类名上即可看出各自所表示的数据结构。
   阅读更多…

第2条:在类的头文件中尽量少引入其他头文件

  与C和C++一样,Objective-C也使用“头文件”(header file)与“实现文件”(implementation file)来区隔代码。用Objective-C语言编写“类”(class)的标准方式为:以类名做文件名,分别创建两个文件,头文件后缀用.h,实现文件后缀用.m。创建好一个类之后,其代码看上去如下所示:
阅读更多…