Object-C 语言使用”消息结构“而非函数调用。该语言是由Smalltalk演化而来,后者是消息型语言的鼻祖。
关键区别在于:使用消息结构的语言,其运行时所执行的代码由运行环境所决定;而使用函数调用语言,由编译器决定。
Object-C语言对象所占的内存总是分配咋堆空间(heap space),绝对不能分配到栈中。
如可以这样写:
NSString *string1 = @"string";
NSString *string2 = [[NSString alloc]initWithCString:"string " encoding:NSStringEncodingConversionAllowLossy];
而不能这样写:
NSString string3;
有时会遇到 不含*的变量,可能会使用栈空间,这些不是Object-C 对象。 如:
CoreGraphics框架中的CGRect
CGRect frame;
frame.origin.x=f;
frame.origin.y=f;
frame.size.width=f;
frame.size.height=f;
起结构体定义:
struck CGRect{
CGPoint origin;
CGSize size;
};
Object-C将堆内存管理抽象出来,不需要malloc和free来分配或释放内存。运行期环境把这部分工作抽象为一套内存管理架构,名叫”引用计数“;
参考《编写高质量IOS与OSX代码的52个有效方法》