Objective-C,通常写成ObjC,不太常用的是ObjectiveC或Obj-C,是一种扩展了C的面向对象编程语言。主要用于MacOSX和GNUstep,两者使用OpenStep标准的系统,它是NeXTSTEP和OpenStep中的基本语言。Objective-C可以在运行gcc的系统上编写和编译,因为gcc包含一个Objective-C编译器。Objective-C是BradCox在他的公司Stepstone于1980年代初发明的。他非常关注软件设计和编程中的现实可用性问题。Objective-C的主要描述是他1986年出版的面向对象编程:一种进化方法。艾迪生韦斯利。国际标准书号0-201-54834-8。优点和缺点Objective-C是一种非常“实用”的语言。它使用一个用C编写的小型运行时库,这只会增加应用程序的少量大小,这与大多数使用大量VM执行时间来代替整个系统运行的OO系统相反。用ObjC编写的程序通常不会比它们的源代码大多少。而它的库(通常不包含在软件发行版中)也与Smalltalk系统使用大量内存打开一个窗口的情况相反。 原始版本的Objective-C不支持垃圾回收。这是当时争论的焦点之一,很多人认为Smalltalk在回收时“死时间”很长,导致整个系统无用。Objective-C没有这个特性来避免这个问题。虽然一些第三方版本已经添加了这个功能(特别是GNUstep),但Apple并没有在其MacOSX10.3中引入这个功能。 另一个问题是ObjC不包含名称空间机制。相反,程序员必须在他们的类名前加上前缀,这通常会导致冲突。2004年,在Cocoa编程环境中,所有MacOSX的类和函数都以“NS”为前缀,例如NSObject或NSButton,以明确它们属于MacOSX核心;“NS”的使用是由于在NeXTSTEP开发时设置了这些类的名称。 虽然Objective-C是C的父集,但它并不把C的基本类型当作顶级对象。 与C++不同,Objective-C不支持运算符重载(它不支持临时多类型)。同样不同于C++,但和Java一样,Objective-C只允许对象从一个类别继承(不能多重继承)。类别和协议可以提供多重继承的许多好处,而没有许多缺点,例如执行时间过长和二进制不兼容。Objective-CRankingTIOBE2010年5月编程语言排行榜近日出炉。本期主要变化是Objective-C进入前十。虽然上个月Objective-C的份额只有0.08%,但在排名上已经迈出了重要的一步——***进入前十。这一步意义重大。要知道自2001年6月TIOBE编程榜单发布以来,只有13种编程语言曾经进入过前十。 Objective-C流行的主要原因可能是它是唯一可以为iPhone和iPad编程的语言。但单从编程语言的角度来看,诞生于1986年的Object-c并没有表现出多少新意。TIOBE2010年6月编程语言排行榜近日出炉,Objective-C的排名继续攀升,从第10位上升到第9位,可见Objective-C还有很大的发展空间。Objective-C和C++单继承比较:Objective-C不支持多继承,(Java和Smalltalk也一样),而C++语言支持多继承。动态的:Objective-C是动态类型的(dynamicalytyped),所以它的类库比C++更容易操作。Objective-C允许在运行时通过字符串名称访问方法和类,以及动态链接和添加类。C++遵循面向对象编程的Simula67(一种早期的OO语言)流派,而Objecive-C属于Smalltalk流派。在C++中,对象的静态类型决定了您是否可以向它发送消息,而在Objective-C中,它是动态类型。Simula67思想流派更安全,因为大多数错误都可以在编译时捕获。Smalltalk学派更灵活。比如一些在Smalltalk中看似正确的程序无法通过Simualr67。从很多角度来看,C++和Objective-C的区别与其说是技术上的,不如说是思维方式上的区别。你想更安全而放弃灵活性吗?Simular67派的支持者声称程序设计的好不需要灵活性,而Smalltalk学派则认为为了灵活性可以在运行时容忍更多的错误。Objective-C简明课程前言◆在开始学习之前,假设您已经具备了C语言的一些基础知识,包括变量类型、函数、返回值、指针的相关概念。如果你不知道这些,建议先学习一下谭浩强的《C程序设计》。◆Objective-C是C语言的派生物,继承了C语言的所有特点。也有一些例外,但它们本身并不是继承自C语言的特性。◆nil:在C/C++中你可能用过NULL,但在Objective-C中是nil。不同之处在于您可以将消息传递给nil(例如[nilmessage];),这是完全合法的,但是您不能对NULL做同样的事情。◆BOOL:C没有正式的布尔类型,在Objective-C中也没有“真正的”布尔类型。它包含在Foundationclasses(基础类库)中(即importNSObject.h;nil也包含在这个头文件中)。BOOL在Objective-C中有两种类型:YES或NO,而不是TRUE或FALSE。◆#import与#include:正如您在helloworld示例中看到的,我们使用#import。#import由gcc编译器支持。我不推荐使用#include,#import和#ifndef#define#endif在.h文件的开头和结尾基本一样。许多程序员都认为使用这些东西是非常愚蠢的。无论如何,只需使用#import。这样不仅可以避免麻烦,而且如果有一天gcc将其删除,将会有足够多的Objective-C程序员坚持保留或放回去。让我告诉你,Apple在他们的官方代码中也使用#import。所以如果有一天真的发生了这种事情,不难期待Apple会提供一个支持#import的gcc分支版本。◆在Objective-C中,方法和消息这两个词可以互换。但是,消息有其特殊性,具体的区别后面会介绍。编译helloworldhello.m#importintmain(intargc,constchar*argv[]){printf("helloworld\n");return0;}输出helloworld在Objective-C中使用#import代替#includeObjective-C默认文件扩展名is.mCreatedwithclasse@interface◆基于“ProgramminginObjective-C”一书中的示例,版权所有(C)2004由SamsPublishing提供,并经许可发布。Fraction.h#import@interfaceFraction:NSObject{intnumerator;intdenominator;}-(void)print;-(void)setNumerator:(int)n;-(void)setDenominator:(int)d;-(int)numerator;-(int)denominator;@endNSObject:NeXTStepObject的缩写。这在今天没有多大意义,因为它已重命名为OpenStep。◆继承用Class:Parent表示,就像上面的Fraction:NSObject。◆@interfaceClass:Parent{....}中包含的称为实例变量。◆当没有设置访问权限(protected、public、private)时,默认访问权限为protected。设置权限的方式后面会讲到。◆实例方法跟在成员变量(即实例变量)之后。格式为:scope(returnType)methodName:(parameter1Type)parameter1Name;范围有两种类型:类或实例。◆实例方法以-开头,类级方法以+开头。◆接口以@end结束。本地HelloWorld代码}以上是Xcode开发环境默认的.m文件内容,也就是原来的HelloWorld示例代码。更多关于helloworldObjective-C中#import和#include的区别在Objective-C中,#import被用作#include指令的改进版本。此外,#import确保一个文件只能被导入一次,这让你在递归包含时没有问题。使用哪一个仍然取决于您。通常,在导入Objective-C头文件时使用#import,在包含C头文件时使用#include。【小编推荐】iOS开发:Objective-C优雅语法高效iOS开发必备的10个Objective-C类库C++开发者速学Objective-C语言核心语法-C编码规范
