第一条:了解Object-c语言的起源
Object-c同属于面向对象语言,但却有点特别,该语言使用"消息结构"而非"函数调用"
Object-c语法由Smalltalk演化而来,而Smalltalk是消息型语言的鼻祖
1.消息型语言和函数型语言区别:
使用消息结构的语言,其运行时所应执行的代码由环境来决定;而使用函数调用的语句,则由编译器决定
如果范例代码中调用的函数是多态的,那么在运行时就要按照"虚方法表"来查出到底应该执行那个函数实现。
而采用消息结构的语言,无论是否多态,总是在运行时才会去查找所要执行的方法(实际上编译器甚至不关心接收消息的对象是何种类型,接收消息的对象有问题也要在运行时处理,所以这过程叫"动态绑定")
2.Object-c特点:
OC的重要工作都是由"运行期组件"而非编译器来完成。使用OC的面向对象特征所需的全部数据结构及函数都在运行期组件里面。举个例子,运行期组件中含有全部内存管理代方法。运行期组件本质就是一种与开发者所编写代码相链接的“动态库”,其代码能把开发者编写的所有程序沾合起来,这样的话,只需要更新运行器组件,即可提升应用程序性能。
而许多工作都在"编译器"完成的语言。若想获得这等性能提升,则要重新编译应用程序代码。
OC的对象都是分配再堆上,而不是栈上
分配在堆中的内存必须直接管理,而分配在栈上用于保存变量的内存则会在其栈帧弹出时自动清理。
再OC代码中,有时会遇到定义里不含*的变量,它们可能会使用“栈”空间。这些边两所保存的不是OC对象。比如coreGraphics框架中的VGrect
第二条:在类的头文件中尽量少引入其他头文件
代替方法使用
类的头文件中使用如下的方式避免引入头文件,同时又能满足你的需要
@class xxxx类
好处1.避免循环引用问题出现
好处2.避免引入用不到的内容,延长编译时间
第三条:多使用字面量语法
好处:简化代码,易读性更强
例如@"abc"而不是[[NSString alloc]initwithString"abc"]
其他类似,你懂得,字典,数组
第四条:多有类型常量,少有宏定义
例如:static const NSString * name = @"abc"
好处是:节省编译时间
第五点:使用枚举表示状态值的改变