博客
关于我
Effective OC 笔记 1了解Objective-C 语言的起源
阅读量:508 次
发布时间:2019-03-07

本文共 1262 字,大约阅读时间需要 4 分钟。

Objective-C是一种扩展自C语言的面向对象编程语言,具有现代化的标准库和动态绑定机制。尽管它与C++、Java等语言在概念上有差异,但其独特的“消息传递”模型使其在运行时管理上有显著特色。以下将从消息传递机制、内存管理以及与C语言的结合等方面进行深入分析。

消息传递与方法调用对比

在Objective-C中,方法调用的方式与普通函数调用有明显区别。Objective-C采用“消息传递”机制,运行时环境决定实际执行的代码,而不是编译器。在C++或Java中,方法调用则是通过函数符号进行的,编译器可以在编译时已知调用的方法和接收者的类型。

具体对比:

  • Objective-C:

    Object *obj = [Object new];[obj performWith:parameter1 and:parameter2];

    这里,performWith:and:是发送给对象的消息,编译器并不关心 Objec类型。运行时根据消息查找对应的方法进行执行。

  • C++:

    Object *obj = new Object();obj->perform(parameter1, parameter2);

    编译器可以验证参数类型和方法存在的必要性,提升了静态类型安全。

这种区别使得Objective-C的灵活性和运行时行为更加显著,特别是在多态应用中,接收消息的对象类型问题会在运行时被动态检查,这称为“动态绑定”。

Objective-C的内存管理与C语言交融

Objective-C扩展了C的内存管理机制,将其与对象模型结合,形成独特的内存管理模式。所有Objective-C对象必须通过指针来操作,因为它们都在堆内存中分配。例如:

NSString *someString = @"hello";// anotherString 也是同一对象的指针NSString *anotherString = someString;

这种设计与C语言的内存分配特性一致,使得开发者可以有更大的控制权并处理内存相关问题。

结构体与对象的选择

为了性能考虑,Objective-C允许在某些情况下选择使用C语言的结构体替代Objective-C对象。比如:

CGRect frame;frame.origin.x = 0.0f;// ... 其他属性设置

CGRect 是一个C结构体,用于表示二维区域,这种情况下使用结构体避免了对象分配和释放的额外开销。如果需要处理内存管理和垃圾回收,明确勾选使用Objective-C对象是更好的选择。

总结

  • Objective-C的核心概念:它是C语言的扩展,保留了C的灵活性,同时引入了面向对象的编程模型。
  • 消息传递机制:通过运行时检查对象类型和方法调用,提供了高度的灵活性,但增加了 valley 错误的风险。
  • 内存管理:与C语言一致,强调指针使用和内存管理的细节要求。
  • 理解这些特征有助于在遵循C语言核心概念的同时,充分发挥Objective-C的面向对象能力,编写高效且健壮的应用程序。

    转载地址:http://ganjz.baihongyu.com/

    你可能感兴趣的文章
    PostgreSQL学习总结(6)—— PostgreSQL 模式(SCHEMA)详解
    查看>>
    PostgreSQL学习总结(7)—— PostgreSQL 语句 INSERT INTO、SELECT、UPDATE、DELETE 等学习
    查看>>
    PostgreSQL学习总结(8)—— PostgreSQL 基于数据库和基于模式(schema)的多租户分析
    查看>>
    PostgreSQL学习总结(9)—— PostgreSQL 运算符与表达式
    查看>>
    PostGreSql学习笔记001---PostgreSQL10.4安装(Windows)_支持PostGreGis_PostJDBC
    查看>>
    PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
    查看>>
    PostgreSQL学习笔记:PostgreSQL vs MySQL
    查看>>
    PostgreSQL实现shape数据转geojson数据(地图工具篇.18)
    查看>>
    PostgreSQL导入shape数据(地图工具篇.10)
    查看>>
    PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre
    查看>>
    PostGreSql工作笔记004---PostGreSql修改密码_windows和linux下修改
    查看>>
    Postgresql常用命令行操作_以及Navicat操作PostGis时的问题_自动截取长度_WKB structure does not match exp---PostgreSQL工作笔记005
    查看>>
    PostgreSQL忘记密码
    查看>>
    PostgreSQL数据库pg_dump命令行不输入密码的方法
    查看>>
    PostgreSQL新手入门
    查看>>
    postgresql树状结构查询示例
    查看>>
    PostgreSQL流复制参数max_wal_senders详解
    查看>>
    postgresql流复制配置
    查看>>
    PostgreSQL清空表并保留表结构、清空数据库还原数据库为新建时的状态的方法
    查看>>
    PostgreSQL的 initdb 源代码分析之九
    查看>>