编写高质量的代码:改善Objective-C程序的61个建议(读书笔记3)

        这两天晚上不知怎么的,精神老好了,工作了一天到家我还想写写东西。安安静静地,听着音乐,再写着文章,真是爽极了。我是不是废话说的太多了,嘿嘿(😋),不错说了,开始进入正题。

建议5:处理隐藏的返回类型,优先选择实例类型而非id

       实例类型(instancetype)是Objective-C语言中心添加的一个返回类型,类的实例,作为方法返回类型,宜采用关键字instancetype作为方法的返回类型,如alloc、init和类工厂方法等。使用instancetype作为类的实例返回类型,可以大大改善Objective-C代码的类型安全。在编写代码中,通常在处理init方法和类工厂方法时,宜采用instancetype类替换id作为返回值。

(1)instancetype仅仅用来作为Objective-C方法的返回类型。

(2)使用instancetype可避免隐式转换id而造成的欺骗性编译无误通过的现象,防止程序正式运行时出现崩溃现象,可以大大改善Objective-C代码的类型安全。

(3)在某一个特定区域,instancetype可以替代id,并非所有区域都可以替代id。

建议6:尽量使用模块方式与多类建议符合关系

模块,封装框架比以往任何时候都更加清洁,不再需要预处理逐行地用文件中的所有内容替换#import指令。一个模块包含了一个框架到自包含的块中,就像预编译文件预编译方式一样提升了编译速度。并且不需要在预编译头文件中声明自己要用到哪些框架,使用模块简单地获得了速度上的提升。

(1)#include和#import,其根本就是简单的复制、粘贴,将目标.h文件中的内容一字不落地复制到当前文件中,后者可以避免多次的重复引用。

(2)以预编译头文件的方式,虽可缩短编译时间,但其维护棘手,不利于广泛应用。

(3)模块功能,其应用不仅仅表现于编译的速度加快,同时在链接框架等方面也非常好用。

(4)启动模块功能后,编译器会隐式地把所有的#import都转换成@import。

建议7:明确Objective-C++中的有所为而有所不为

(1)C++和Objective-C在定义结构上一样,但是后者的继承是封闭的。

(2)Objective-C接口中定义的C++类是全局范围的,而不是Objective-C类的内嵌类。

(3)C++和Objective-C的对象类型不能直接兼容。与Objective-C不同的是,C++对象是静态类型的,有运行时系统多态是特殊情况。

(4)C++和Objective-C有词汇歧义和冲突。

(5)C++和Objective-C两者功能上有限制。Objective C++没有为Objective-C类增加C++的功能,也没有为C++类增加Objective-C的功能。

建议8:C语言与Objective-C语言的关系是充分而非必要条件

Objective-C作为C程序设计语言的超集,支持与C相同的基本语法。如基本类型(int、float等)、结构、函数、指针,以及流程控制结构,还可以访问标准C库,如stdlib.h和stdio.h.

(1)C语言中每个标准变量类型在Objective-C中都可用。

(2)C语言中的标准运算符在Objective-C中可用。

(3)可用标量来表示Objective-C的属性。

(4)通过点语法访问值时,可以在属性中使用C操作符。

(5)在Objective-C中,定义了新的基本数据类型。例如NSInteger和NSUInteger.

(6)C语言中的数据结构在Objective-C中可保持其基本值。例如:

NSString *mainString = @”This is a long string”;

NSRange substringRange = [mainString rangeOfString:@”long”];

(7)Objective-C值对象比C类型变量具有封装常用操作的优势

要点:

(1)C语言的基本语法在Objective-C语言中是可用的。

(2)与C语言相比,Objective-C语言又定义了新的基本数据类型,如BOOL等。

(3)Objective-C值对象比C类型变量具有封装常用操作的优势,但在数值计算中,使用C类型标量更为简洁。

      啰里啰嗦,又写了这么多,感觉很充实,希望都有所启发,如果文中有错误,请指出,谢谢!下次见喽,,,

    原文作者:Super洁
    原文地址: https://www.jianshu.com/p/98808611ced4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞