标题：Objective-C
简介
Objective-C，通常写作ObjC和较少用的Objective C或Obj-C，是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统，而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在gcc运作的系统写和编译，因为gcc含Objective-C的编译器。1980年代初布莱德·确斯(Brad Cox)在其公司Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。Objective-C最主要的描述是他1986年出版的Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.[1]​
Objective-C用途：编写IOS操作系统(如：iphone、ipod touch、ipad 等苹果移动终端设备 )应用程序的利器　Tiobe在今年7月的编程语言排行榜中有一个显著变化是：一直在50名左右的Objective-C排名大幅提升，它的流行当归功于iphone的成功，因为Objective-C一直被用于编写iphone应用程序。
语言特性
Objective-C是非常实际的语言。它使用一个用C写成、很小的运行库，只会令应用程序的大小增加很小，和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。ObjC写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。[1]
Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一，很多人考虑到Smalltalk回收时有漫长的死亡时间，令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个功能。
另一个问题是ObjC不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀，时常引致冲突。在2004年，在Cocoa编程环境中，所有Mac OS X类别和函式均有NS作为前缀，例如NSObject或NSButton来清楚分辨它们属于Mac OS X核心;使用NS是由于这些类别的名称在NeXTSTEP开发时定下。
虽然Objective-C是C的母集，但它也不视C的基本型别为第一级的对象。
Objective-C同C++的异同：
和C++不同，Objective-C不支持运算子重载(它不支持ad-hoc多型)。亦与C++不同，但和Java相同，Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处，而且没有很多缺点，例如额外执行时间过重和二进制不兼容。
优缺点
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只容许对象继承一个类别（不设多重继承）。Categories和protocols不但可以提供很多多重继承的好处，而且没有很多缺点，例如额外执行时间过重和二进制不兼容。
由于Obj-C使用动态运行时类型，而且所有的方法都是函数调用（有时甚至连系统调用（syscalls）也如此），很多常见的编译时性能优化方法都不能应用于Obj-C（例如：内联函数、常数传播、交互式优化、纯量取代与聚集等）。这使得Obj-C性能劣于类似的对象抽象语言（如C++）。不过Obj-C拥护者认为既然Obj-C运行时消耗较大，Obj-C本来就不应应用于C++或Java常见的底层抽象。
排行榜
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的增长速度非常快。
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 看来无误的程序拿到Simualr 67那里就无法通过。 
从很多方面来看，C++和Objective-C的差别，与其说是技术上的， 不如说是思维方式上的。你是否想更安全而舍弃灵活性？Simular67学派的支持者称既然程序设计出色何必再要灵活性，而 Smalltalk学派则称为了灵活可以容忍运行时多出错。2013年1月  2013年1月编程语言排行榜榜单Object-C继续停留在第三位。随着手机应用程序市场的继续增长占着主导的地位，预计Java（Android）和C++/C#（Windows Phone）也将会重获民心，而Objective-C也会继续增长。2013年2月TIOBE 公布了2013年2月TIOBE 编程语言指数排行榜。此次前三位置有变化，Java 重回第一，C 降至第二，  2013年2月TIOBE编程语言排行榜Objective-C 还是第三。2013年3月2013年3月12日，Tiobe公布了新一期编程语言排行榜。Java依旧是占据第一的位置，C语言紧随其后。值  2013年3月TIOBE编程语言排行榜[2]得注意的Objective-C持续发力，已经占到了第三的位置。咋一看榜单，前5条中C#下滑最快，从第3名下降到第五名。而其他语言都与之前没有变化。
简明教程
前言▲开始学习前，假设你已经具备了一些C语言的基础知识，包括变量类型、函数、返回值、以及指针的相关概念。如果对这些还不了解，建议首先学习谭浩强的《C程序设计》。
▲Objective-C，是 C 的衍生体，继承了所有 C 语言的特性。是有一些例外，但是它们不是继承于 C 的语言特性本身。
▲nil：在 C/C++ 你或许曾使用过 NULL，而在 Objective-C 中则是 nil。不同之处是你可以传递讯息给 nil（例如 [nil message];），这是完全合法的，然而你却不能对 NULL 如法炮制。
▲BOOL：C 没有正式的布尔类型，而在 Objective-C 中也不是「真的」有。它是包含在 Foundation classes（基本类别库）中（即 import NSObject.h；nil 也是包括在这个标头档内）。BOOL 在 Objective-C 中有两种型态：YES 或 NO，而不是 TRUE 或 FALSE。
▲ #import vs #include：就如同你在 hello world 范例中看到的，我们使用了 #import。#import 由 gcc 编译器支援。我并不建议使用 #include，#import 基本上跟 .h 档头尾的 #ifndef #define #endif 相同。许多程式员们都同意，使用这些东西这是十分愚蠢的。无论如何，使用 #import 就对了。这样不但可以避免麻烦，而且万一有一天 gcc 把它拿掉了，将会有足够的 Objective-C 程式员可以坚持保留它或是将它放回来。偷偷告诉你，Apple 在它们官方的程式码中也使用了 #import。所以万一有一天这种事真的发生，不难预料 Apple 将会提供一个支援 #import 的 gcc 分支版本。
▲ Objective-C 中， method 及 message 这两个字是可以互换的。不过 messages 拥有特别的特性，具体区别在后面介绍。[3]​为什么很难作为一个Objective-C的coder，我总能听到一部分人在这门语言上抱怨有很多问题。他们总在想快速学习这门语言来写一个App出来，但他们也总是联想到Objective-C看上去实在太难了或者在想这些语法符号都是神马玩意?不错，他们问得非常好，所以本人也解释一下为什么很多程序员相比较学习Ruby或者Java很容易，但在决定开发iOS或者OS X应用时会那么犹豫。
Apple公司领导着Objective-C语言的发展与维护，包括Objective-C运行时，Cocoa/Cocoa-Touch框架以及Objective-C语言的编译器。看上去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]​hello world◇ hello.m
#import<stdio.h>
int main( int argc, const char *argv[] ) {
printf( "hello world\n" );
return 0;
}
◇输出
hello world
◇ 在 Objective-C 中使用 #import 代替 #include
◇ Objective-C 的预设副档名是 .mclasses@interface
*基於 "Programming in Objective-C," Copyright (C) 2004 by Sams Publishing 一书中的范例，并经过允许而刊载。
◇Fraction.h
#import<Foundation/NSObject.h>
@interfaceFraction: NSObject{ 
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;
@end
◇NSObject：NeXTStep Object 的缩写。因为它已经改名为 OpenStep，所以这在今天已经不是那麼有意义了。
◇继承（inheritance）以 Class: Parent 表示，就像上面的 Fraction: NSObject。
◇夹在 @interface Class: Parent { .... } 中的称为 instance variables。
◇没有设定存取权限（protected, public, private）时，预设的存取权限为 protected。设定权限的方式将在稍后说明。
◇Instance methods 跟在成员变数（即 instance variables）后。格式为：scope (returnType) methodName: (parameter1Type) parameter1Name;scope 有class 或 instance 两种。
◇instance methods 以 - 开头，class level methods 以 + 开头。
◇Interface 以一个 @end 作为结束。
(未完,待续...)
原生代码
01 #import <Foundation/Foundation.h>
02 
03 int main (int argc, const char * argv[]) {
04 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
05 
06 // insert code here...
07 NSLog(@"Hello, World!");
08 [pool drain];
09 return 0;
10 }
以上是Xcode开发环境下默认的.m文件内容，就是原生的Hello World范例代码。[5]​
关于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%，比去年同期增长了 3.37%。  
  
  [6]