第一章 熟悉 Objective-C

第一条:了解 Objective-C 起源

Objective-C 是 C 语言动态性扩充。使用“消息结构”而非“函数调用”,因为继承了 Smalltalk 的语言风格。消息与函数的区别如下:

1
2
3
4
5
6
Object *obj = [Object new];  
[obj performWith:parameter1 and:parameter2];
// Function calling(C++)
Object *obj = new Object;
obj -> perform(parameter1,parameter2);

关键区别在于:使用消息结构的语言,其运行时执行的代码由运行环境决定;而函数调用的语言,由编译器决定。

Objective-C 重要工作都由“运行期组件”而非编译器完成的。它的面向对象的特性所需的数据结构和函数全在运行期组件里面。例如:运行期组件含有全部的内存管理方法。

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

  1. 除非特殊需要,否则不要引入头文件。尽量在头文件中使用向前声明,在实现文件引入所使用的头文件,这样做可以尽量降低类之间的耦合。
  2. 有时无法使用向前声明,比如声明某个类遵守一项协议。这种情况下,尽量把该遵守该协议的声明放在分类里,在分类的实现文件中实现协议方法,这样能够降低依赖和耦合度。

第三条:多用字面量语法,少用与之等价的方法

使用字面量能够缩减代码长度,使其更为易读。

  1. 字面量创建 NSString、NSNumber、NSArray、NSDictionry 更加简明扼要
  2. 字面量穿件字典和数组时候,遇到 nil 会抛出异常。

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

1
2
#define ANIMATION_DURATION 0.3              
static const NSTimeInterval KAnimationDuration = 0.3

某个类文件内部使用的常量需要添加 static 修饰符,不然编译器会给他创建一个“外部符号”,会与其他文件中同名的命名冲突。

static 修复局部变量,编译阶段初始化,保存在静态数据区,延长生命周期。修饰全部变量,改变变量的影响域

假如需要提供外部使用的常量做法

1
2
extern NSString *const RJNotifacitionName;  // .h文件声明
NSString *const RJNotifacitionName = @"RJNotifacitionName"; //.m文件

大专栏  编写高质量 Objective-C 代码ure>

const 修饰符从有右到左看,上面就是一个不可变指针

第五条:用枚举表示状态、选项、状态码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// C语言枚举风格
enum RJNetState {
RJNetSuccess,
RJNetFailure
};
typedef enum RJNetState RJNetState;
RJNetState state = RJNetFailure;
// 系统枚举宏快速创建
typedef NS_ENUM(NSInteger, RJNetState) {
RJNetSuccess,
RJNetFailure
};
typedef NS_OPTIONS(NSInteger, RJDirection) {
RJDirectionTop = 1 << 0,
RJDirectionLeft = 1 << 1,
RJDirectionBottom = 1 << 2,
RJDirectionRight = 1 << 3,
};

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

第六条:理解“属性”这一概念

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

第八条:理解对象“等同性”这一概念

第九条:以“类族模式“隐藏实现细节

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

第十一条:理解 objc_msgSend 的作用

第十二条:理解消息转发机制

第十三条:用”方法调配技术“调试”黑盒方法“

第十四条:理解类对象的用意

编写高质量 Objective-C 代码的更多相关文章

  1. HTML Inspector – 帮助你编写高质量的 HTML 代码

    HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码.HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工 ...

  2. iOS应用开发最佳实践系列一:编写高质量的Objective-C代码

          本文由海水的味道编译整理,转载请注明译者和出处,请勿用于商业用途! 点标记语法 属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问,其他的情况使用方括号标记语法. 良好的 ...

  3. 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)

    接着上一遍文章<<编程精粹--编写高质量C语言代码(2):自己设计并使用断言(一)>>,继续学习怎样自己设计并使用断言,来更加easy,更加不费力地自己主动寻找出程序中的错误. ...

  4. 怎样编写高质量的java代码

    代码质量概述     怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍.也请有过代码质量相关经验的朋友 ...

  5. 怎样编写高质量的 Java 代码

    代码质量概述 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍.也请有过代码质量相关经验的朋友提出宝贵 ...

  6. 编程精粹--编写高质量C语言代码(4):为子系统设防(一)

    通常,子系统都要对事实上现细节进行隐藏,在进行细节隐藏的同一时候.子系统为用户提供了一些关键入口点. 程序猿通过调用这些关键的入口点来实现与子系统的通信.因此假设在程序中使用这种子系统而且在其调用点加 ...

  7. 如何编写高质量的js代码--底层原理

    转自: 如何编写高质量的 JS 函数(1) -- 敲山震虎篇   本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm ...

  8. 如何编写高质量的C#代码(一)

    从"整洁代码"谈起 一千个读者,就有一千个哈姆雷特,代码质量也同样如此. 想必每一个对于代码有追求的开发者,对于"高质量"这个词,或多或少都有自己的一丝理解.当 ...

  9. 编写高质量的 Java 代码

    代码质量概述 代码质量所涉及的5个方面,编码标准.代码重复.代码覆盖率.依赖项分析.复杂度分析.这5方面很大程序上决定了一份代码的质量高低. 我们分别来看一下这5方面:编码标准:这个想必都很清楚,每个 ...

  10. 如何编写高质量的 jQuery 代码?

    想必大家对于jQuery这个最流行的javascript类库都不陌生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,我们将介绍一些书写高质量jQuery代码的原则,我们不单单 ...

随机推荐

  1. Git与IDEA集成

    软件配置: 系统版本:Windows10 JDK版本:1.8 Git版本:2.19.1 IDEA版本:2016.3 Maven版本:3.5.4 Git安装: Git下载地址:https://git-s ...

  2. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

  3. UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释(转)

    layoutSubviews总结 ios layout机制相关方法 - (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit——————- - (voi ...

  4. iOS 部分API理解

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  5. vbox NAT 设置端口映射(NAT+8080端口转发)

    VirtualBox的提供了四种网络接入模式,它们分别是: 1.NAT 网络地址转换模式(NAT,Network Address Translation) 2.Bridged Adapter 桥接模式 ...

  6. 替换String中的\r\n\t

    String json = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n " ...

  7. [LC] 93. Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  8. 不同SQL数据库之间表数据的实时同步-发布与订阅

    https://blog.csdn.net/rand_muse/article/details/81326879 上述文章中,如果是实时同步,选择  事务发布即可 在快照代理 那里,不需要勾选  运行 ...

  9. day43-线程概念

    #1.进程:程序不能单独运行,要将程序加载到内存当中,系统为它分配资源才能运行,而这种执行的程序就是进程. #程序和进程的区别在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活 ...

  10. Facebook推云存储,究竟是福利还是陷阱?

    被全球人民diss了很长时间的Facebook,近段时间也是穷尽各种办法来挽回自己的声誉.除了不断的道歉.做出各种保护隐私承诺外,Facebook还在旗下产品的功能上玩转新花样.如,前些日子Faceb ...