Objective-C是一个很“大”的语言,我是说它的语法很复杂而且又具备弹性。Apple 公司已经尽可能减小了 Objective-C语言的体积,然而,他们还是添加了一些东西来让 Objecive-C表达式更加简单。
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 属性,整个头文件就这么点东西:
__OSX_AVAILABLE_STARTING (__MAC_NA,__IPHONE_3_0);
// 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 的唯一途径了。