美文网首页
1. Objective-C语言(三)C 结构体 CGRect

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

作者: 海盗军长 | 来源:发表于2018-06-29 12:52 被阅读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 语言具备了哪些优点?缺点呢?

    相关文章

      网友评论

          本文标题:1. Objective-C语言(三)C 结构体 CGRect

          本文链接:https://www.haomeiwen.com/subject/pofayftx.html