鱼C论坛

 找回密码
 立即注册
查看: 2726|回复: 1

[技术交流] Objective-C 和 C++ 的区别有哪些?

[复制链接]
发表于 2014-8-1 00:35:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

知乎问题:这几天闲来无事在图书馆看obj-c的书,看了两天,给我的感觉是,这东西不就是加了面向对象的c吗,而且类的语法还那么古怪。这东西跟c++有什么本质区别?为什么苹果会选择obj-c而不是c++?

  答:Objective-C是C的扩展,设计思路上借鉴了Smalltalk的面向对象和消息机制的思想。从我个人使用过的面向对象语言来看Objc是对消息传递支持的最彻底也最显式的。Objective-C的类中定义的方法都是消息传递,而且类和消息之间是运行时绑定的,运行时编译器把消息发送转换成对objc_msgSend方法的调用。其它的C++、Java、Python、Ruby都体现的不明显,更倾向于对象的封装和抽象。

  Objective-C和C++基本上是两门语言,没有太大的关系。Objective-C本身是静态语言,编译后就是机器码,执行效率很高,但引入了很多类似Python、Ruby的动态特性,像动态类型推断,id,selector,block等特性,所以又非常灵活。用惯了Java或C++会觉得Objective-C的语法很怪,但是把心放空再去学习这门语言的话,你会很快爱上它的消息式的编程风格,加上XCode,无论是写mac应用还是ios应用,都会非常得心应手。

  学习Objective-C不需要有c的背景,倒是学Objective-C的时候顺手可以把C也学了或温习下,由于Objective-C是C的超集,所以在Objective-C环境执行C程序毫无问题。

  关于苹果为什么采用Objective-C的问题,说明一下,其实不是苹果采用了Objective-C,而是乔布斯创建的Next公司的操作系统NextStep采用了Objective-C作为原生语言。NextStep是以Mach和BSD为基础,Objective-C是其语言和运行库,后来的事大家都清楚,苹果买了NextStep,乔布斯回归苹果,NextStep也成了Max OS X的基础。以后发展越来越好,Objective-C反而成了苹果的当家语言,现在基本上是苹果在维护这门语言的发展。

  还有一点不能不提,第一台万维网的Server就是一个叫蒂姆·伯纳斯-李的大牛在NextStep上写的,包括浏览器。所以,咱们得感谢Objective-C,要不然还不知道互联网会发展成啥样呢......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-1 09:24:06 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 14:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表