Object-c

开源公司:布莱德·考克斯

作品详情

中文名
扩充C的面向对象编程语言
展开
简写
ObjC&OC
展开
创始人
类型系统
静态类型、动态类型、弱类型
展开
主要实现产品
Glang、GCC
展开
影响语言
Java、Objective-J、TOM、Nu语言、Swift
展开
外文名
Objective-C
展开
适用领域
计算机
展开
创始时间
1980年代
展开
操作系统
跨平台
展开
启发语言
展开

1发展历史

早期发展

Objective-C 主要由Stepstone公司的布莱德·考克斯(Brad Cox)和汤姆·洛夫(Tom Love) 在 1980 年代发明。

1981年 Brad Cox 和 Tom Love 还在ITT 公司技术中心任职时,接触到了SmallTalk语言。Cox 当时对软件设计和开发问题非常感兴趣,他很快地意识到SmallTalk语言在系统工程构建中具有无法估量的价值,但同时他和 Tom Love 也明白,当前ITT 公司的电子通信工程相关技术中,C 语言被放在很重要的位置。

于是 Cox 撰写了一个 C 语言的预处理器,打算使 C 语言具备些许 Smalltalk 的本领。Cox 很快地实现了一个可用的 C 语言扩展,此即为 Objective-C语言的前身。到了 1983 年,Cox 与 Love 合伙成立了 Productivity Products International(PPI)公司,将 Objective-C 及其相关库商品化贩售,并在之后将公司改名为StepStone。1986年,Cox 出版了一本关于 Objective-C 的重要著作《Object-Oriented Programming, An Evolutionary Approach》,书内详述了 Objective-C 的种种设计理念。

1988年,斯蒂夫·乔布斯(Steve Jobs)离开苹果公司后成立了NeXT Computer公司,NeXT 公司买下 Objective-C 语言的授权,并扩展了著名的开源编译器GCC使之支持 Objective-C 的编译,基于 Objective-C 开发了AppKit与Foundation Kit等库,作为 NeXTSTEP 的的用户界面与开发环境的基础。虽然 NeXT 工作站后来在市场上失败了,但 NeXT 上的软件工具却在业界中被广泛赞扬。这促使 NeXT 公司放弃硬件业务,转型为销售NeXTStep(以及OpenStep)平台为主的软件公司。

1992年,自由软件基金会的 GNU 开发环境增加了对 Objective-C 的支持。1994年,NeXT Computer公司和Sun Microsystem联合发布了一个针对 NEXTSTEP 系统的标准典范,名为 OPENSTEP。OPENSTEP 在自由软件基金会的实现名称为GNUstep。1996年12月20日,苹果公司宣布收购 NeXT Software 公司,NEXTSTEP/OPENSTEP环境成为苹果操作系统下一个主要发行版本OS X的基础。这个开发环境的版本被苹果公司称为Cocoa。

2005年,苹果电脑雇用了克里斯·拉特纳及LLVM开发团队[2],clang及LLVM成为苹果公司在GCC之外的新编译器选择,在Xcode4.0之后均采用 LLVM 作为默认的编译器。最新的 Modern Objective-C 特性也都率先在 Clang 上实现。

版本迭代

Objective-C++

Objective-C++是GCC的一个前端,它可以编译混合了C++与Objective-C语法的源文件。Objective-C++是C++的扩展,类似于Objective-C是C的扩展。由于在融合C++与Objective-C两种语言的特性方面没有做特别的工作,因此有以下限制:

·C++类不能从Objective-C类继承,反之亦然。

·Objective-C定义内部不能定义C++名字空间。

·Objective-C类的成员变量不能包括不含默认构造函数和/或含有虚方法的C++类对象,但使用C++类指针并无如此限制(可以在 -init方法中对之进行初始化)。

·C++“传递值”的特性不能用在Objective-C对象上,而只能传递其指针。

·Objective-C声明不能存在在C++模板声明中,反之亦然。但Objective-C类型可以用在C++模板的参数中。

·Objective-C和C++的错误处理语句不同,各自的语句只能处理各自的错误。

·Objective-C错误使得C++对象被退出时,C++析构函数不会被调用。新的64位运行时解决了这个问题。

Objective-C 2.0

在2006年7月苹果全球开发者会议中,Apple宣布了“Objective-C 2.0”的发布,其增加了“现代的垃圾收集,语法改进,运行时性能改进,以及64位支持”。2007年10月发布的Mac OS X v10.5中包含了Objective-C 2.0的编译器。

Modern Objective-C

苹果公司在 WWDC2012 大会上介绍了大量 Objective-C 的新特性,能够让程序员更加高效地编写代码,这些新特性在 Xcode4.4 版本中已经可以使用。

·Object Literals

·默认生成 @synthesize 代码

·遍历元素

·Subscripting Methods

2语言特点

基本特点

Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准C语言(C++对C语言的兼容仅在于大部分语法上,而在ABI(Application Binary Interface)上,还需要使用extern "C"这种显式声明来与C函数进行兼容),而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。[1]

Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的死亡时间,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个功能。

虽然Objective-C是C的超集,但它不是C的基本类型为第一级的对象。

消息传递

Objective-C最大的特色是承自Smalltalk的消息传递模型(message passing),此机制与今日C++式之主流风格差异甚大。Objective-C里,与其说对象互相调用方法,不如说对象之间互相传递消息更为精确。此二种风格的主要差异在于调用方法/消息传递这个动作。C++里类别与方法的关系严格清楚,一个方法必定属于一个类别,而且在编译时(compile time)就已经紧密绑定,不可能调用一个不存在类别里的方法。但在Objective-C,类别与消息的关系比较松散,调用方法视为对对象发送消息,所有方法都被视为对消息的回应。所有消息处理直到运行时(runtime)才会动态决定,并交由类别自行决定如何处理收到的消息。也就是说,一个类别不保证一定会回应收到的消息,如果类别收到了一个无法处理的消息,程序只会抛出异常,不会出错或崩溃。

异同

Objective-C同C++的异同:

和C++不同,Objective-C不支持运算子重载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。

Objective-C和C++的比较

单一继承:

和Java、Smalltalk一样,Objective-C不支持多重继承,而C++语言支持多重继承。

动态:

Objective-C是动态定型(dynamicaly typed),它的类库比C++容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。

C++ 跟从面向对象编程里的Simula 67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。

在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objective-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。 而Smalltalk学派更灵活,比如一些Smalltalk 看来无误的程序拿到Simualr67那里就无法通过。

从很多方面来看,C++和Objective-C的差别,与其说是技术上的, 不如说是思维方式上的。你是否想更安全而舍弃灵活性?Simular67学派的支持者称既然程序设计出色何必再要灵活性,而 Smalltalk学派则称为了灵活可以容忍运行时多出错。

优缺点

Apple在其Mac OS X10.3中仍未引入垃圾回收这个功能。不过令人欣慰的是在Apple发布的Xcode4中已经支持自动释放(不等同于严格意义上的垃圾回收,因为两者机制不同)。在Xcode4中的自动释放,也就是ARC(Automatic Reference Counting)机制,不需要用户手动去Release一个对象,而是在编译期间,编译器会自动帮你添加[NSObject release]。

另一个问题是Objective-C不包括命名空间机制(namespace mechanism),取而代之的是程序设计师必须在其类别名称加上前缀,时常引起冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类和函数均有“NS”作为前缀,例如NSObject或NSButton,以表明它们属于Mac OS X核心(使用“NS”是由于这些类和函数在NeXT OpenStep开发时定下的)。

虽然Objective-C是C的超集,但它不视C的基本型为第一级的对象。

由于Objective-C使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用(syscalls)也如此),很多常见的编译时性能优化技术失效(例如:内联函数、常数传播、交互式优化、纯量取代与聚集等)。这使得Objetive-C性能劣于类似的对象抽象语言(如C++)。不过Objective-C拥护者认为既然Objective-C运行时消耗较大,Objective-C本来就不应应用于C++或Java常见的底层抽象。

3HelloWord

{     {    ();  }   ;}

4应用范围

Objective-C是编写以下应用的利器:

  • iOS操作系统
  • iOS应用程序
  • iPad OS操作系统
  • iPad OS应用程序
  • MacOS X操作系统
  • Mac OSX 上的应用程序

Objective-C的流行归功于iPhone的成功。编写iPhone应用程序的主要编程语言是Objective-C。

5争议

Objective-C的最初版本并不支持垃圾回收(garbage collection)。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去功用,Objective-C为避免此问题才不拥有这个功能。某些第三方版本加入了这个功能(尤是GNUstep),苹果公司也在其Mac OS X 10.5中提供了实现。

另一个广受批评的问题是ObjC不包括名字空间机制(namespace mechanism)。取而代之的是程序员必须在其类别名称加上前缀,由于前缀往往较短(相比名字空间),这时常引致冲突。在2007年,在Cocoa编程环境中,所有Mac OS X类别和函数均有“NS”作为前缀,例如NSObject或NSButton来清楚分辨它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。

虽然Objective-C是C的严格超集,但它也不视C的基本类型为第一级的对象。

和C++不同,Objective-C不支持运算符重载(它不支持ad-hoc多态)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外运行时间过重和二进制不兼容。[来源请求]

由于Obj-C使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用(syscalls)也如此),很多常见的编译时性能优化方法都不能应用于Obj-C(例如:内联函数、常数传播、交互式优化、纯量取代与聚集等)。这使得Obj-C性能劣于类似的对象抽象语言(如C++)。不过Obj-C拥护者认为Obj-C本就不应应用于C++或Java常见的底层抽象,Obj-C的应用方向是对性能要求不大的应用。

6词条图册

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
案例
本方案面向xx仓库管理,解决了仓库在入库 出库 生产中出现的库存管理问题 保证产品数据的正确和完整,并且通过管理计算出相关的商品的成本信息 相比于市场常规方案 本方案实现了个别特殊需求以及特殊处理场景 比如合同管理 入库出库 红冲月末特殊信息处理等 本方案采用b/S的架构 方便不同管理人员进行操作 审核 查看等 同时添加小程序的审核功能 实现流程化操作。
510vueMysqlERP
1.本软件为iOS移动端软件项目,提供远程1v1,1vN视频语音多媒体教学。支持电子白板,视频,语音,教材,课中交互等功能。可供相关机构使用,以及技术支持。 2.本软件支持,手机端,iPad端使用。支持丰富的课中交互。视频,语音流畅稳定,功能新颖多样,如上台发言等。支持查看多人课中状态,包括举手,禁言等。 3.本软件产品支持后续更多功能扩展。
320教育ios
本app支持 会议录制 自动开启云端录制 自定义会议录像储存周期 会议录像无限制回看 稳定的音视频互动 支持千人级别并发无延迟 最多与7名参与者同时音视频互动 支持多名参与者多种方式循环发言 无限文档云盘 会议文档云端储存 选择文档实时极速展示 协作白板 支持激光笔、画笔、文字、图形等多种工具,辅助演示 屏幕共享 支持共享桌面及各种应用,多端实时同步查看 会议文档 支持展示Word、Excel、PPT、PDF、MP3、MP4等多种格式文档 分组讨论 支持自动分配、手动分配等分组模式,创建会议时按需设置讨论小组 特色工具 提供计时器、选择器、互动小游戏等多种特色工具,提高会议参与
硕云笔记是一款通过点阵纸笔技术,实现将手写内容进行数字化识别、采集、存储、分享的一款产品。 本软件可快速集成第三方业务系统,如党建系统,培训系统,内部OA系统等。 支持APP 快速集成。 支持内网部署。 支持国产化部署。 有效的解决了当前各类党建学习,会议内容,日常学习,商务谈判等笔记本数据采集,安全存储,笔记文档共享等问题。
420APPiosSwift
业务亮点: 1. 与数百名专家合作,致力于企业赋能培训 2. 上万小时的课程,致力于企业内部的培训 3. 营销获客,橙未来平台入驻上千家企业,帮助企业之间营销获客 4. 结合AI工具,提高企业用户的生产力 5. 对接权威专家咨询业务,可一键咨询 背景: 橙未来在辽宁获得了企业精益管理培训的政府资格,给本地企业赋能培训,精益管理 借此机会,同时也开发这个app,打通企业之间的营销获客,助力企业业务增长,并且同时拥有大量专家资源,也能给企业赋能培训工作 功能介绍: 一、AI工具 对接ChatGPT,以及stable diffusion,以及腾讯数字人等AI工具,帮助企业打造宣传视频,文案,生图
340vue微服务iosandroid企业培训赋能平台
当前共412个项目

评论