1.oc使用消息结构而非函数调用

使用消息结构的语言,运行时所应执行的代码由运行环境来决定,而是用函数调用的语言,则由编译器决定。函数调用:如果调用的函数是多态的,那么在运行时就要按照“虚方法表”来查找到底应该执行哪个函数实现。消息结构:不论是否多态,总是在运行时才会去查找所要执行的方法。实际上,编译器甚至不关心接收消息的对象是何种类型,接收消息的对象问题也要在运行时处理,这个过程叫做动态绑定。

2.oc创建一个新的对象时,指针存放在栈上,指针所指向的内存区域分配在堆中,分配在堆中的内存必须直接管理,而分配在栈上用于保存变量的内存则会在其帧栈弹出时自动清理。

在oc代码中,有时会遇到定义中不含*的变量,他们可能会存放在“栈空间”,比如CGRect,CGRect是c结构体,如果改成oc对象的话,性能会受影响。与创建结构体相比,创建对象还需要额外花销,例如分配及释放堆内存等,如果只需保存int,float,,double,char等“非对象类型”,那么通常使用CGRect这种结构体就够了。

3.向前声明(@class),将引入头文件的实机尽量延后,只有在确有需要时才引入,这样可以减少类的使用者所需要引入的头文件数量,减少编译时间,也解决了两个类互相引用的问题。两个类循环引用虽然不会导致死循环,但两个类中有一个将无法正常编译。有时无法使用向前声明,比如要声明某个类遵循某一项协议。尽量吧“该类遵循某一项协议”的这条声明移到类扩展中,如果不行的话,就把协议单独分配在一个头文件中,然后将其引入。

4.多用字面量语法(语法糖)

使用字面量语法,可以缩减源代码长度,使其更为易懂,用字面量语法创建数组时,若数组中有空对象(nil),则会抛出异常,使用字面量语法更为安全,应该通过取下标操作来访问数组对象或字典中的键所对应的元素;用字面量语法创建数组或字典是,务必确保值里不含nil。

5.多用类型常量,少用#define预处理指令

变量一定要同时使用static与const来声明,如果试图修改由const修饰符所声明的常量,编译器会报错,而static则意味着该变量仅在此变量的编译单元中可见,若声明此变量不加static,则编译器会为它创建一个“外部符号”(external symbol),此时若是另一个编译单元中也声明了同名变量,那么编译器就会报错。若要对外公开,将次变量放在“全局符号区”,以便可以在定义该变量的编译单元外使用,应该这样来定义:

//头文件中

extern NSString *const EOCStringConstant

//实现文件中

NSString *const EOCStringConstant = @"VALUE";

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

6.用枚举表示状态,选项,状态码

如果把传递给某个方法的选项表示为枚举类型,而多个选项又可以同时使用,那么就将各选项值定义为2的幂,以便通过按位或操作将其组合以来NS_ENUM定义正常枚举类型,NS_OPTIONS定义组合枚举类型,在处理枚举类型的switch语句中不要使用default分支,这样加入新枚举以后,编译器就会提示开发者,switch语句并未处理所有枚举

最新文章

  1. jquery blockui 遮罩
  2. TCP/IP详解系列 --- 概念总结02
  3. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)(加解密)
  4. docker-2 深入了解docker
  5. BZOJ3834 : [Poi2014]Solar Panels
  6. BestCoder Valentine's Day Round
  7. scala学习资料
  8. C# WPF使用ZXing生成二维码ImageSource
  9. A题进行时--浙大PAT 1021-1030
  10. 高并发场景之RabbitMQ篇
  11. jq+bootstrap响应式系统管理页面
  12. Django_Admin操作
  13. 五、Java基础加强
  14. linux 查看系统负载:uptime
  15. 正则表达式识别js跳转的链接
  16. ES6模块的import和export用法
  17. Android Native jni 编程 Android.mk 文件编写
  18. vue 插件
  19. 漫谈JVM之类加载机制(篇一)
  20. 限定filesize的数据泵导入导出操作案例

热门文章

  1. Java这些冷知识你知道吗?
  2. C++数组做参数
  3. vb.net 代码建立控件,并显示在窗体上
  4. Python Fabric远程自动部署简介
  5. [转载]ACM搜索算法总结(总结)
  6. Solitaire
  7. Leftmost Digit
  8. 特征提取方法: one-hot 和 IF-IDF
  9. AngularJS学习篇(十九)
  10. instanceof 原理