Objective-C 编程语言

Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在GCC以及Clang运作的系统上编写和编译,因为GCC与Clang含Objective-C的编译器。 1980年代初布莱德·确斯(Brad Cox)在其公司Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。Objective-C最主要的描述是 他1986年出版的Object OrIEnted Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.

Objective-C用途:编写iOS操作系统(如:iPhone、iPod touch、iPad 等苹果移动终端设备 )应用程序和Mac OS X操作系统应用程序的利器。 Objective-C的流行当归功于iPhone的成功,因为Objective-C被用于编写iPhone应用程序。

基本特点

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同C++的异同:
和C++不同,Objective-C不支持运算子重载(它不支持ad-hoc多型)。亦与C++不同,但和 Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。CateGories和protocols不但可以提供很多多重继承的好 处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。
Objective-C和C++的比较
单一继承:
Objective-C不支持多重继承,(同Java和Smalltalk),而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 X 10.3中仍未引入垃圾回收这个功能。不过令人欣慰的是在Apple发布的Xcode4中已经支持自动释放啦,我不敢冒昧地说那是垃圾回收,因为两者机制不同,在XCODE4中的自动释放,也就是ARC(Automatic Reference Counting)机制,是不需要用户手动去Release一个对象,而是在编译期间,编译器会自动帮你添加那些以前你经常写的[NSObject release]。
另一个问题是ObjC不包括命名空间机制(namespace mechaNism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在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只容许对象继承一个类别(不设多重继承)。
由于Obj-C使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用(syscalls)也如此),很多常见的编译时性能优化方法都不能应用于Obj-C(例如:内联函数、常数传播、交互式优化、纯量取代与聚集等)。这使得Obj-C性能劣于类似的对象抽象语言(如C++)。不过Obj-C拥护者认为既然Obj-C运行时消耗较大,Obj-C本来就不应应用于C++或Java常见的底层抽象。
这些年我们爱着的 Objective-C
Objective-C是开发OS X和iOS应用的标准语言。即便是天天跟它打交道的开发者,有些也会误以为Objective-C就是Apple公司创建出来的语言,但实际上它并不是Apple的亲骨肉,而是从别人家过继过来的孩子。

唐天勇 发布于 2016-06-26 08:28:11 | 25 次阅读

Objective-C正在死亡?
自苹果swift语言推出以来,Objective-C在编程语言排名中就直线下降。虽然2010年到2014年间Objective-C曾以惊人的速度 上升,热度从0直线上升到12.8%,成为排名第三的编程语言。但最近一年Objective-C下降的甚至比当初上升速度还快,短

发布于 2015-08-08 16:13:52 | 49 次阅读

Objective-C 引用计数原理
本篇内容主要为大家提供的是Objective-C 引用计数原理。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2016-04-12 19:49:11 | 51 次阅读

Objective-C Method Swizzling 的最佳实践
本篇内容主要为大家提供的是Objective-C Method Swizzling 的最佳实践。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2016-04-01 10:04:09 | 29 次阅读

Objective-C Autorelease Pool 的实现原理
本篇内容主要为大家提供的是Objective-C Autorelease Pool 的实现原理。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2016-03-26 09:37:30 | 37 次阅读

深入理解Objective-C:Category
本篇内容主要为大家提供的是深入理解Objective-C:Category。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2016-03-26 09:41:24 | 35 次阅读

Objective-C调用Swift
本篇内容主要为大家提供的是Objective-C调用Swift。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2016-03-05 12:00:54 | 76 次阅读

Objective-C Runtime 1小时入门教程
本篇内容主要为大家提供的是Objective-C Runtime 1小时入门教程。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2016-03-02 09:57:19 | 52 次阅读

Objective-C与JavaScript交互的那些事
本篇内容主要为大家提供的是Objective-C与JavaScript交互的那些事。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2016-02-17 10:23:34 | 88 次阅读

Objective-C中的集合类
本篇内容主要为大家提供的是Objective-C中的集合类。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2016-01-19 13:49:33 | 57 次阅读

Objective-C对方法进行注释的方法
本篇内容为大家讲解的是Objective-C对方法进行注释的方法,感兴趣的同学参考学习下,本文内容如下:

发布于 2015-12-31 20:24:07 | 64 次阅读

Objective-C中的Block回调模式
本篇内容主要为大家提供的是Objective-C中的Block回调模式。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2015-12-28 10:17:20 | 78 次阅读

Objective-C中的老板是这样发通知的(Notification)
本篇内容主要为大家提供的是Objective-C中的老板是这样发通知的(Notification)。感兴趣的同学可以参考学习下,具体内容如下:

发布于 2015-12-29 20:04:13 | 63 次阅读

Objective-C实例变量
本篇内容为大家讲解的是Objective-C实例变量,感兴趣的同学参考学习下,本文内容如下:

发布于 2015-12-13 18:25:41 | 82 次阅读


Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务