iOS 编写高质量代码

一.#import 如果在各自的头文件中引入对方的头文件,则会导致“循环引用” 使用#import 而非 #include指令虽然不会导致死循环,但却意味着这两个类里又一个无法被正确编译。

二.多用常量 少用#define 预处理指令

宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化。只保存一份到 .rodata 段。甚至有相同后缀的字符串也可以优化,你可以用GCC 编译测试,"Hello world" 与 "world" 两个字符串,只存储前面一个。取的时候只需要给前面和中间的地址,如果是整形、浮点型会有多份拷贝,但这些数写在指令中。占的只是代码段而已,大量用宏会导致二进制文件变大

变量:共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以被修改,在编译阶段会执行类型检查

常量:共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以根据const修饰的位置设定能否修改,在编译阶段会执行类型检查

常量

全局常量:不管你定义在任何文件夹,外部都能访问

constNSString*HSCoder =@"汉斯哈哈哈";

局部常量:用static修饰后,不能提供外界访问

staticconstNSString*HSCoder =@"汉斯哈哈哈";

const修饰位置不同,代表什么?

1.const NSString *HSCoder = @"汉斯哈哈哈";

"*HSCoder"不能被修改, "HSCoder"能被修改

2.NSString const *HSCoder = @"汉斯哈哈哈";

"*HSCoder"不能被修改, "HSCoder"能被修改

3.NSString * const HSCoder = @"汉斯哈哈哈";

"HSCoder"不能被修改,"*HSCoder"能被修改

const右边的总不能被修改

iOS 编写高质量代码_第1张图片

#define KANIMATION_DURATION 0.3

static const NSTimerInterval KAnimationDuration = 0.3;

常量名称:常量在.m中则在前面添加字母k,若常量在类外可见则通常以类名为前缀。

常量的使用

#import

@interfaceSMConst :NSObject

externCGFloatconstSMMMMMMMMMFloat;

externNSString*constSMMMMMMMMMString;

@end

#import"SMConst.h"

@implementationSMConst

#if DEBUG

CGFloatconstSMMMMMMMMMFloat =100;

NSString*constSMMMMMMMMMString =@"ddd";

#else

CGFloatconstSMMMMMMMMMFloat =90;

NSString *constSMMMMMMMMMString =@"bbb";

#endif

@end

1.不要使用预处理指令定义常量,而借助编译器来确保常量正确,在.m文件中用static const 来声明常量

2.不要好似用预处理指令定义常量。这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作。即使有热闹重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致。

3.在实现文件中使用static const 来定义 “只在编译单元内可见常量”。由于此类常量不在全局符号表中,所以无须尾气名称加前缀。

4.在头文件中使用 extern 来声明全局常量,并在相关实现文件中定义其值。这种常量要出现在全局富豪表中国年,所以其名称应该加以区隔,通常用与之相关的雷名做前缀。

三.用枚举表示状态、选项 状态码.

四.属性的特质

@property (nonatomic,readwrite,copy) NSString *name;

iOS 编写高质量代码_第2张图片
iOS 编写高质量代码_第3张图片


iOS Runtime  引用  iOS~runtime理解

iOS 编写高质量代码_第4张图片
iOS 编写高质量代码_第5张图片


你可能感兴趣的:(iOS 编写高质量代码)