为何Objective-C很难

转自:http://mobile.51cto.com/hot-322261.htm
 
2012-03-07 13:43 junwong 开源中国社区  字号:T | T
一键收藏,随时查看,分享好友!

做为一个Objective-C的coder,我总能听到一部分人在这门语言上抱怨有不少问题。他们总在想快速学习这门语言来写一个App出来,但他们也老是联想到Objective-C看上去实在太难了或者在想这些语法符号都是神马玩意?不错,他们问得很是好,因此本人也解释一下为何不少程序员相比较学习Ruby或者Java很容易,但在决定开发iOS或者OS X应用时会那么犹豫。程序员

AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!编程

 

语法:app

首先咱们谈谈神马叫作编程语言,编程语言是一种让人们能读懂而且可以展示程序的执行行为的语言,包括语法(正确的表达式以及状态机的使用规则)以及语义(如何去组织这些表达式以及状态机以一种有意义的方式去完成咱们的目标)框架

大部分编程语言都是基于C语法风格的,也就是咱们常说的点语法,依靠小数点符号来调用方法或者获取类的成员(固然了,在C语言中类被替代为结构体)。它们一般都是本身实现类的定义(注意在这里Java与C#和 C++有稍微一点不同),但不管如何这些语言的具体细节都是同样的。当咱们接触一个新的编程语言时,咱们固然很乐意看到新语言的语法是咱们似曾相识的。毕竟大部分程序员都了解C语言的语法。编程语言

然而Objective-C压根就不是C语法风格的编程语言。它与咱们熟悉的语言语法区别太大以致于大部分程序员根本看不懂这些Objective-C代码是神马东西。学习

甚至其余一些像Python或者Ruby这样的“奇怪”的语言都能让人看个大概出来,毕竟Python与Ruby至少仍是点语法风格的,使用点语法来调用方法以及获取类的成员。相反它们缺少分支结构并不会长时间影响程序员的理解,毕竟这两种语言也有本身的方式来完成一样的目标。atom

下面咱们来介绍一下Objective-C语言: 这里我会拿另外一个OOP语言来与它进行比较spa

我想这里你们确定还不会有什么问题,来看看这个:设计

好了好了,我想确定有部分人想问一大堆问题了。但这还不是最糟糕的,咱们接着来看一个更强悍的:code

通常到了这里,我想你们都头都大了几圈。

这究竟是个神马情形?这么多分号!太恐怖了!接着会冒出一大堆问题:这到底调用的是神马方法?又是怎么调用的?是performAction吗仍是别的东西?方法重载该如何作?哦,个人天!

最好先忘了咱们熟悉的方法调用。实际上,当你看到performAction:withTwoParameters:时,咱们其实在谈论消息而不是方法。当你能这么理解时问题就好办多了。

实际上Objective-C是很严格的C语言的超集。而与流行的编程语言风格又差距太大。做为C语言的超集,它增长了不少东西,咱们将简单看看它到底增长了什么复杂的东西。

Objective-C是一个很“大”的语言,我是说它的语法很复杂并且又具有弹性。Apple公司已经尽量减少了Objective-C语言的体积,然而,他们仍是添加了一些东西来让Objecive-C表达式更加简单。

  • Synthesizing properties
  • Dot-syntax for accessing getters/setters
  • Garbage Collection
  • Blocks (closures)
  • Automatic Reference Counting
  • Weak references

因此虽然这个语言愈来愈大了,可是在表达一样的目的使用的代码却愈来愈简单。

运行时:

Objective-C的运行时是动态的,它能让你在运行时为类添加方法或者去除方法以及使用反射。

除非你用过像Ruby或者Lisp这类支持这种特性的语言,不然你会感受很怪异。但请放心!在你尝试使用一些好的新特性时一开始都是很郁闷的。

框架:

若是离开了Cocoa/Cocoa Touch框架,那么Objective-C简直无法建立App。就如同Ruby离开了Rails就无法建立Web应用程序同样。

Cocoa既大又老。好比看看UIView的contentStretch属性,整个头文件就这么点东西:

  1. @property(nonatomic) CGRect contentStretch __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
  2.  // animatable. default is unit rectangle {{0,0} {1,1}} 

就这么多?首先我假定它定义了一个可拉伸的内容区域,可是这是如何作到的?矩形单元又在哪里?Cocoa/Cocoa-Touch是解释这个的惟一途径,做为Objective-C的新人,你能够去咨询它。

历史:

纵向看来,Apple公司领导着Objective-C语言的发展与维护,包括Objective-C运行时,Cocoa/Cocoa-Touch框架以及Objective-C语言的编译器。看上去Objective-C就如同如下一个云状图:

当你去学习Objective-C时,它不只仅就是一个框架,一个运行时或者一个编译器;而是它们所有。还有个很重要的部件就是 Automatic Reference Counting(使用后没法直接调用dealloc方法),这玩意会让你使用Cocoa/Cocoa-Touch编程时更加方便。

紧密耦合系统代码设计是Objective-C独有的。其余语言好比在.Net框架下运行的Iron Python。以及一大堆运行在JVM的非Java语言,好比Clojure。甚至Ruby以及Rails都是两个不一样的项目。当你打算使用其余语言配合 Cocoa/Cocoa-Touch以及Objective-C运行时时。你惟一的选择就是Mac Ruby。

将来 :

这4年来,咱们能够看到Apple公司已经尽量的减少了Objective-C语言的大小以及复杂度。他们也完成了手动内存自动管理以及经典C头文件的方式;并且开始慢慢对属性存取器引入点语法以及 Automatic Reference Counting来方便程序员编程。但就如今看来,Objective-C仍是比较难接触与学习的;之因此如今变得愈来愈流行惟一的缘由就是它是作iOS app的惟一途径了。

【责任编辑: 立方 TEL:(010)68476606】
相关文章
相关标签/搜索