1.了解Objective-C语言

2018-05-11 13:24:34 浏览数 (1)

了解Objective-C语言

** Objective-C 语言是“消息结构”(messaging structure) 类似C 、Java 是“函数调用”(function calling)**

代码语言:javascript复制
// messaging structure (Objective-C)
Object *obj = [Object new];
[obj performWith:parameter1 and:parameter2];

// function calling (C  )
Object *obj = new Object;
obj->perform(parameter1,parameter2);
  • 区别在于:使用消息结构的语言,其运行时所应执行的代码由运行环境决定,函数调用的语言,由编译器决定。
  • 消息结构执行的方法,总是在运行时才去查找所要执行的方法,甚至不关心接收消息的对象是何种类型;其过程叫做“动态绑定”。

** Objective-C对象声明 **

代码语言:javascript复制
// 声明一个名为 someSting 的变量,其类型是 NSString * 。
NSString *someString = @"The String";

// 此 someSting 为指向NSString 的指针。
  • 所有 Objective-C 语言的对象都必须像以上声明,因为对象所占==内存==总是分配在“堆空间”,而绝不会分配在“栈”上。不能在栈中分配 Objective-C 对象。
代码语言:javascript复制
NSString someString;
// error :interface type cannot be statically allocated
  • 有时会遇到定义不含 * 的变量,他们可能会使用“栈空间”,这些变量所保存的不是Objective-C对象。比如 CGRect;
代码语言:javascript复制
CGRect frame;
frame.origin.x = 0.0f;
frame.origin.y = 10.0f;
frame.size.width = 100.0f;
frame.size.height = 150.0f;

// CGRect 是 C 结构体,其定义是:
struct CGRect {
    CGPoint origin;
    CGSize size;
};
type struct CGRect CGRect; 
  • 整个系统架构都在使用这种结构体,因为如果改用 对象来做的话,性能会受影响。与创建结构体相比,创建对象还需要额外开销,例如分配及释放堆内存等,如果只需保存 int、float、double、chat、等“非对象类型”,那么通常使用CGRect这种结构体就可以了。

0 人点赞