Objective-C,通常写作ObjC或OC和较少用的
Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于
Mac OS X和
GNUstep这两个使用
OpenStep标准的系统,而在
NeXTSTEP和OpenStep中它更是基本语言。
语言用途
Objective-C是编写以下应用的利器:
Objective-C的流行归功于iPhone的成功。编写iPhone
应用程序的主要编程语言是Objective-C。
语言特点
基本特点
Objective-C是非常实用的语言。它是一个用C写成很小的
运行库,令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准
C语言(
C++对C语言的兼容仅在于大部分语法上),而在
ABI(Application Binary Interface)上,还需要使用
这种显式声明来与C函数进行兼容,而在此基础上增加了
面向对象编程语言的特性以及
Smalltalk消息机制。
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++的比较
单一继承:
和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 X 10.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常见的底层抽象。
难度
苹果公司一直在尝试降低Objective-C语言的
复杂度 --淘汰手动内存管理以及C标准头文件,引入更符合当下
编程语言潮流的ARC机制,还有通过.语法来访问属性的getter/setter方法等等,都是为了降低Objective-C的学习难度。即便如此,学习Objective-C仍然需要克服学习门槛。它的热度完全是由基于Objective-C编写的热门
iOS应用带起来。
产品排行榜
2010年5月
本期主要变化是Objective-C排名进入前十。尽管Objective-C的份额在上个月只达到0.08%,但却在排名上迈出了重要一步——首次进入前十名。这一步的意义重大,要知道,2001年6月
TIOBE编程榜发布以来,总体只有13个编程语言曾经进入前十名。
Objective-C流行的主要原因可能是它是唯一一种可以为iPhone和
iPad编程的语言。但单从编程语言的角度来看,诞生于1986年的Object-c并没有表现出多少新意。
2011年6月
Objective-C排名继续爬升,从第10名上升到第7名,增长2.07%,是前二十名中增幅最大的。由此可见,Objective-C具有很大的发展空间。
2011年7月
本期的榜单标题: Objective-C将成为年度语言。Objective-C名列第6名。
2011年8月
Objective-C继续强劲上升,有可能在2011年超过C#和
PHP。
2011年11月
Objective-C保持在第6位,距离第5位的PHP仅有0.113%的差距,且保持
上升趋势,而PHP呈现下降趋势,很可能在2011年会超越PHP升至第5位。
2011年12月
Objective-C在本期中又上升至第5位.
2012年1月
前三的位置有变动,
第三位置已经易主,由上一期的C++变为了C#,不过Objective-C 在连续两年获得第二名之后,终于赢得了 TIOBE 2011 年度编程语言。
2012年7月
Objective-C升至第3位,压倒了之前的C++,
市场份额占到9.335%。
2012年8月
Objective-C继续上升,随着JAVA的下降,Objective-C存在超越JAVA的势头。
2012年9月
Objective-C继续上升至第三位,但其与前两名的差距还有很大,由此可见,未来很长一段时间内,还没有语言能够撼动C和
Java的地位。
2012年10月
Objective-C继续上升,增加了3.23个
百分点,市场份额达到9.477%。
Objective-C蹿升势头良好,增加了4.40个百分点,市场份额达到17.455%。
2012年12月
Object-C继续停留在第三位,增加了4.31%个百分点,
增长速度傲视群雄。市场份额达到11.116%,相比其他语言Object-C的增长速度非常快。
2013年1月
Object-C继续停留在第三位。随着手机应用程序市场的继续增长占着主导的地位,预计Java(
Android)和C++/C#(
Windows Phone)也将会重获民心,而Objective-C也会继续增长。
2013年2月
TIOBE 公布了2013年2月TIOBE 编程语言指数排行榜。此次前三位置有变化,Java 重回第一,C 降至第二,Objective-C 还是第三。
2013年3月
2013年3月12日,
Tiobe公布了新一期编程语言排行榜。Java依旧是占据第一的位置,C语言紧随其后。值得注意的Objective-C持续发力,已经占到了第三的位置。咋一看榜单,前5条中C#下滑最快,从第3名下降到第五名。而其他语言都与之前没有变化。
2013年4月
2013年4月TIOBE编程语言排行榜发布了!4月份最主要的变化是 C 语言超越 Java 又居第一,而 C++ 超过 Objective-C 位列第三。
2013年5月
2013年5月
TIOBE编程语言排行榜发布!C语言涨势迅猛,依然占据着榜首的位置;Java、C++略有下滑,又由于Objective-C的反弹,本来差距不大的C++与Objective-C再度易位!
2013年8月
在2013年8月排行中,TIOBE增加了16个新的搜索引擎后,C和Objective-C成为最大的
受害者,它们呈大幅下降趋势,分别下降了1.65% 和2.17%;而
Go 语言则从42 名提升到26 名。LabVIEW者从100提升到49名,Openedge ABL从129名提升到57名。而Java又重新回到了自己的宝座。
原生代码
以上是
Xcode开发环境下默认的.m文件内容,就是原生的Hello World范例代码。
关于hello world的更多扩展内容
在 Objective-C 中 #import 和 #include 的区别
在 Objective-C 中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import 确定一个文件只能被导入一次,这使你在
递归包含中不会出现问题。使用哪一个还是由你来决定。一般来说,在导入 Objective-C
头文件的时候使用 #import,包含 C 头文件时使用 #include。
未来发展
2011年已经过去一半,从
市场占有率来看,有一种语言脱颖而出,那就是Objective-C,相对2010年增长了2.68%,亚军则是Lua,
增长率为1.04% ,如果按这个走势下去,2012年的1月,Lua也将和Objective-C一样,成为年度语言。
2010年的4月,TIOBE
世界编程语言排行榜的前20名。Objective-C则从第8一路飙升,超越了C#,占据了第4的位置。
2012年的7月,Objective-C首度超越了C++,取代C++成为排行榜的第3位,成为新科探花。
2013年的1月,Objective-C 连续第 2 年获得“年度语言”殊荣。年度语言是指在上一年份额增长最多的语言。Objective-C 最新的份额为 10.283%,比2012年
同期增长了 3.37%。