1.oc使用消息结构而非函数调用
使用消息结构的语言,运行时所应执行的代码由运行环境来决定,而是用函数调用的语言,则由编译器决定。函数调用:如果调用的函数是多态的,那么在运行时就要按照“虚方法表”来查找到底应该执行哪个函数实现。消息结构:不论是否多态,总是在运行时才会去查找所要执行的方法。实际上,编译器甚至不关心接收消息的对象是何种类型,接收消息的对象问题也要在运行时处理,这个过程叫做动态绑定。
2.oc创建一个新的对象时,指针存放在栈上,指针所指向的内存区域分配在堆中,分配在堆中的内存必须直接管理,而分配在栈上用于保存变量的内存则会在其帧栈弹出时自动清理。
在oc代码中,有时会遇到定义中不含*的变量,他们可能会存放在“栈空间”,比如CGRect,CGRect是c结构体,如果改成oc对象的话,性能会受影响。与创建结构体相比,创建对象还需要额外花销,例如分配及释放堆内存等,如果只需保存int,float,,double,char等“非对象类型”,那么通常使用CGRect这种结构体就够了。
3.向前声明(@class),将引入头文件的实机尽量延后,只有在确有需要时才引入,这样可以减少类的使用者所需要引入的头文件数量,减少编译时间,也解决了两个类互相引用的问题。两个类循环引用虽然不会导致死循环,但两个类中有一个将无法正常编译。有时无法使用向前声明,比如要声明某个类遵循某一项协议。尽量吧“该类遵循某一项协议”的这条声明移到类扩展中,如果不行的话,就把协议单独分配在一个头文件中,然后将其引入。
4.多用字面量语法(语法糖)
使用字面量语法,可以缩减源代码长度,使其更为易懂,用字面量语法创建数组时,若数组中有空对象(nil),则会抛出异常,使用字面量语法更为安全,应该通过取下标操作来访问数组对象或字典中的键所对应的元素;用字面量语法创建数组或字典是,务必确保值里不含nil。
原文:http://www.cnblogs.com/lmg4819/p/5004749.html