1. Objective-C语言(三)C 结构体 CGRect

2018-06-29  本文已影响0人  海盗军长

在 Objective-C 代码中,有时会遇到定义里不含 * 的变量,他们可能会使用 “栈空间” (stack space)。这些变量所保存的不是 Objective-C 对象。比如 CoreGraphics 框架中的 CGRect :

CGRect frame;
frame.origin.x = 0.0f;
frame.origin.y = 10.0f;
frame.size.width = 100.0f;
frame.size.height = 50.0f;

CGRect 是 C 结构体,其定义是:

struct CGRect {
  CGPoint origin;
  CGSize size;
};
typedef struct CGRect CGRect;

整个系统都在使用这种结构体,因为如果改用 Objective-C 对象来做的话,性能会受影响。与创建结构体相比,创建对象还需要额外开销,例如分配和释放堆内存等。如果只需保存 int float double char 等 “非对象类型 ”(nonobject type),那么通常使用 CGRect 这种结构体就可以了。

总结

Objective-C 为 C 语言添加了面向对象特性,是其超集。 Objective-C 使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息之后,究竟应执行何种代码,由运行期环境而非编译器来决定。 (思考1)

思考1
为什么 Objective-C 要使用动态绑定的消息结构?
使用动态绑定有什么优势?
Objective-C 语言相比 C 语言具备了哪些优点?缺点呢?

上一篇下一篇

猜你喜欢

热点阅读