编写高质量代码-OC 第1章 让自己习惯OC

1、视Objective-C为一门动态语言
虽然OC和C++都是在C的基础上加入面向对象特性扩充而成的程序设计语言,OC基于动态运行时类型,而C++基于静态类型。OC编写的程序不能直接编译成可使机器语言(二进制编码),而是在程序运行时,通过运行时(Runtime)把程序转译成可令机器读懂的机器语言。

  • Objective-C是动态语言,C++是静态语言
  • 静态语言执行效率和安全性要比动态语言高,但其简便性没有动态语言高
  • 运行时(Runtime)环境可处理弱类型、函数存在检查工作,会检测注册列表里是否存在对应的函数,类型是否正确,最后确定正确的函数地址,再进行保存寄存器状态、压栈、函数调用等实际操作,确保了objective-C的灵活性。

2、在头文件中尽量减少其他头文件的使用

  • 在头文件(.h)中,关键字“@class”,只是为了在头文件中引用这个类,把这个类作为一个类型来用,这就要求引用的头文件(.h)名与类的名称一样
  • 在头文件(.h)中使用“@class”,在源文件中使用“#import”,不但可以减少不必要的编译时间,降低类之间的耦合度,而且还可以避免循环引用。
  • 在设计类时,尽量多采用协议,避免#import过多,引用不必要的部分。
  • 如果头文件(.h)中有多个类的定义,尽量采用模块方式,只针对性引进所需要的类。

3、尽量使用const、enum来替换预处理#define

  • 尽量避免使用#define预处理命令。#define预处理命令不包含任何的类型信息,仅仅是在编译前做替换操作。它们在重复定义时不会发出警告,容易在整个程序中产生不一致的值。
  • 在源文件(.m)中定义的static const类型常量因为无须全局引用,所以它们的名字不需要包含命名空间。
  • 在头文件(.h)中定义的全局引用的常量,需要关联定义在源文件(.m)中的部分。因为需要被全部引用,所以它们的名字需要包含命名空间,通常是用他们的类名作为命名前缀。
  • 尽量用NS_ENUM和NS_OPTIONS宏来实现枚举。

4、优先使用对象字面量语法而非等效方法

  • 尽量使用对象字面量语法来创建字符串、数字、数组和字典,比常规对象创建方法语法更为简明
  • 完全向下兼容
  • 在数字和字典中,要使用关键字和索引做下标来获取数据
  • 使用对象字面量语法时,容器类的不可使nil,否则运行时将会抛出异常。

5、处理隐藏的返回类型,优先选择实例类型(instancetype)而非id

  • instancetype仅用于返回类型
  • 使用instancetype可避免隐式转换id而造成的欺骗性编译无误通过的现象,防止程序正式运行时出现崩溃现象,提高安全性
  • 在某一个特定区域,可以替代id,并非所有区域都可以替代id

6、尽量使用模块方法与多类建立复合关系

  • #include和#import,其根本就是简单的复制、粘贴,将目标.h文件中内容一字不落的复制到当前文件中,后者可以避免多次的重复引用
  • 以预编译头文件的方式,虽可缩短编译时间,但其维护棘手,不利于广泛应用。
  • 模块功能,其应用不仅仅表现于编译的速度加快,同时在连接框架等方面也非常好用
  • 启动模块功能后,编译器会隐式地把所有的#import都转换成@import

7、明解Objective-C++中的有所为而有所不为

  • C++和Objective-C在定义结构上一样,但是后者的继承是封闭的
  • Objective-C接口中定义的C++类是全局范围,而不是Objective-C类的内嵌类
  • C++和Objective-C的对象模型不能直接兼容,与Objective-C不同的是,C++对象是静态类型的,有运行时系统多态是特殊情况
  • C++和Objective-C有词汇歧义和冲突
  • C++和Objective-C两者功能上有限,Objective C++没有为Objective-C类增加C++的功能,也没有为C++类增加Objective-C的功能
时间: 2024-12-18 15:17:48

编写高质量代码-OC 第1章 让自己习惯OC的相关文章

转载-------编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)

阅读目录 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量 建议3:三元操作符的类型务必一致 建议4:避免带有变长参数的方法重载 建议5:别让null值和空值威胁到变长方法              The reasonable man adapts himself to the world; The unreasonable one persists in trying to adapt the world himself. 明白事理的人使自己适应世界:不明事理的人想让世

代码质量优先——《编写高质量代码:改善c程序代码的125个建议》

高质量的代码不但可以促进团队合作.减少bug处理.降低维护成本,对程序员自身的成长也是至关重要的.很难想象一个参考<如何编写无法维护的代码>写代码的程序员技术成长的上限有多么低.为了写出高质量的代码,我们需要听取过来人的改善代码质量的经验,<编写高质量代码:改善c程序代码的125个建议>就是一本能让人写出高质量代码的好书. 本书的第三章<程序控制语句应该保持简洁高效>首先用简练的语言介绍了流程控制结构的概念,然后提供了对if.else.for.do-while.swit

编写高质量代码:Web前端开发修炼之道(一)

最近老大给我们买来一些技术方面的书籍,其实很少搬着一本书好好的完整的看完过,每每看电子档的,也是打游击式的看看这章,瞅瞅那章,在那5本书中挑了一本比较单薄的<编写高质量代码web前端开发修炼之道>,看完觉得不错,它从一个整体架构上来说明如何编写高质量代码,而细处也着重说明一些比较重要的技术点,给人一种从高处俯瞰web开发.很完整的感觉,在这感谢老大,谢谢他让我们不停的进步着.下面是我看书过程中的笔记. 第一章:从网站重构说起 没什么好说的,从一个糟糕的老网页实例说明需要将web的结构,样式和行

编写高质量代码改善java程序的151个建议——导航开篇

2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,惨不忍睹是吧.确实,人和代码一样都在成长,都在变好当中.有时候只是实现功能的编程,长进不了呀. 博客提供的好处就可以交流,讨论的学习方法你们应该知道. 在这里,我会陆陆续续的进行对<编写高质量代码改善java程序的151个建议>看法,希望大家点击交流. 正文 看这本书原因   1.项目做的只是实现功能,然而没有好好

编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]

前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用.事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分.一旦我们开始编写稍微复杂的C#代码,就肯定离不开泛型.委托和事件.本章将针对这三个方面进行说明. 这里也有一篇之前我对泛型的简

编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]

前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用.事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分.一旦我们开始编写稍微复杂的C#代码,就肯定离不开泛型.委托和事件.本章将针对这三个方面进行说明. 本文已更新至http://w

《编写高质量代码》web前端开发修炼之道-读书笔记

第一章  从网站重构说起 <编写高质量代码>web前端开发修炼之道-读书笔记

编写高质量代码改善python程序91个建议学习01

编写高质量代码改善python程序91个建议学习 第一章 建议1:理解pythonic的相关概念 狭隘的理解:它是高级动态的脚本编程语言,拥有很多强大的库,是解释从上往下执行的 特点: 美胜丑,显胜隐,简胜杂,杂胜乱,平胜陡,疏胜密 python定义 #python排序 def quicksort(arr): less=[];greater=[] if len(arr)<=1: return arr pivot=arr.pop() for x in arr: if x<=pivot: less

编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误、不要在不恰当的场合下引发异常、重新引发异常时使用inner Exception]

原文:编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误.不要在不恰当的场合下引发异常.重新引发异常时使用inner Exception] 前言 自从.NET出现后,关于CLR异常机制的讨论就几乎从未停止过.迄今为止,CLR异常机制让人关注最多的一点就是"效率"问题.其实,这里存在认识上的误区,因为正常控制流程下的代码运行并不会出现问题,只有引发异常时才会带来效率问题.基于这一点,很多开发者已经达成共识:不应将异常机制用于正常控制流中.达成的另一个共识是:CLR异常机制带来

《编写高质量代码188个建议》读书笔记

第一章  JavaScript语言基础 一.代码的执行速度决定的因素是: 1.代码量少,运行速度不一定快 2.代码量多,速度也不一定慢 建议1:警惕Unicode代码 javascript代码每个字符都两字节,这样函数名和变量名都可以使用中文来命名 1 <script> 2 var 人名 = "张三"; 3 console.log(人名); 4 5 function 技术(开发){ 6 console.log(开发); 7 } 8 9 技术("哈哈");