OC是C语言的超集,使用了面向对象的特性。OC使用消息结构(messaging structure)而非方法调用(function calling),区别在于,消息结构在运行时决定执行的代码,而方法调用,由编译器决定。
OC使用引用计数机制,熟悉C的内存模型有助于了解OC的内存管理。
OC的对象都是声明在堆(heap)中,写法: NSString *somgString = @"The string"; 在栈(stack)中声明是不合法的, NSString someString;
区别:堆一般由程序员分配,而栈由编译器分配
OC的内存管理已经抽象出来,叫做引用计数(reference counting),不需要程序员去malloc和free。
有些OC的变量(非对象)是使用栈空间的,比如:CGRect,相当于C的结构体。因为频繁地创建释放OC的对象,会影响性能。
在类的头文件中尽量少引入其他头文件,这样做可以尽可能的减少编译时间,并减少相互依赖。此时,使用向前声明(forward declaration)。
有些情况,比如声明遵循某个协议,首先考虑把这些协议声明移到class-continuation分类中,其次或放置到一个单独的只包含协议的头文件中。