Object-C

OC之日常内存优化一

2018-05-03  本文已影响0人  王小丫子

日常开发优化小常识

1. 在类的头文件中尽量少引入其他头文件
2.多用字面量语法,少用与之等价的方法
3.多用类型常量,少用#define预处理指令
更优处理(利用编译器的某种特性)

延伸:有时候需要对外公开某个常量怎么办?

比如说:你可能要在类代码中调用NSNotificationCenter以通知他人。用一个对象来派发通知,令其他欲接收通知的对象向该对象注册,这样就能实现该功能。派发通知时,需要使用字符串来表示此项通知的名称,而这个名字就可以为一个外界可见的常值变量(constant variable),这样的话,注册者无需知道实际字符串值,只需要以常值变量来注册自己想要接收的通知即可。</br>此类常量需要放在“全局符号表”(global symbol table)中,以便可以在定义该常量的编译单元之外使用。因此,其定义方式与static const有所不同。</br>.h里面:extern NSString *const EOCStringConstant;</br>.m里面:NSString *const EOCStringConstant=@"value";</br>
这种常量在头文件中“声明”,且在实现文件中“定义”,常量定义应该从右至左解读。所以在本例中:EOCStringConstant就是“一个常量,而这个常量是指针,指向NSString对象”。这与我们的需求相符,发通知的时候,我们不希望有人改变此指针常量,使其指向另一个NSString对象。</br>
编译器看到头文件中的extern关键字,就会告诉编译器,在全局符号表中将会有一个名叫EOCStringConstant的符号。也就是,编译器无须查看其定义,就可以允许代码使用此变量。因为它知道。当链接成二进制文件之后,肯定能找到这个常量。</br>原理解释:此类常量必须要定义,而且智能定义一次。通常将其定义在声明该常量的头文件相关的实现文件里。由实现文件生成目标文件时,编译器会在“数据段”(data section)为字符串分配存储空间。链接器会把此目标文件与其他目标文件相链接,以生成最终的二进制文件。凡事用到EOCStringConstant这个全局符号的地方,链接器都能将其解析。

要点总结
上一篇 下一篇

猜你喜欢

热点阅读