ios培训——简介Objective-C语言.ppt_第1页
ios培训——简介Objective-C语言.ppt_第2页
ios培训——简介Objective-C语言.ppt_第3页
ios培训——简介Objective-C语言.ppt_第4页
ios培训——简介Objective-C语言.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Objective-C,通常写作ObjC和较少用的ObjectiveC或Obj-C,是扩充C的面向对象编程语言。它主要使用于MacOSX和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在g运作的系统写和编译,因为g含Objective-C的编译器。1980年代初布莱德确斯(BradCox)在其Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。Objective-C最主要的描述是他1986年出版的ObjectOrientedProgramming:AnEvolutio

2、naryA,pproach.AddisonWesley.ISBN0-201-54834-8.,优点及缺点,Objective-C是非常“实际”的语言。它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。ObjC写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。Objective-C的最初版本并不支持垃圾回收。,思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯,在当时这是争论的焦点之一,很多人考虑到Smalltalk回收

3、时有漫长的“死亡时间”,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep),Apple在其MacOSX10.3中仍未引入这个功能。另一个问题是ObjC不包括命名空间机制(namespacemechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有MacOSX类别和函式均有“NS”作为前缀,例如NSObject或NSButton来清楚分别它们属于,MacOSX核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。虽然Objective-C是

4、C的母集,但它也不视C的基本型别为第一级的对象。和C+不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C+不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。,Objective-C排行榜,思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯,TIOBE20105月编程语言榜已于近日发布,本期主要变化是Objective-C排名进入前十。尽管Objective-C的份额在上个月只达到0.08%,但却

5、在排名上迈出了重要一步首次进入前十名。这一步的意义重大,要知道,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和,Smallta

6、lk),而C+语言支持多重继承。,动态:,思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯,Objective-C是动态定型(dynamicalytyped)所以它的类库比C+要容易操作。Objective-C在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。,C+跟从面向对象编程里的Simula67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。,在C+里,对象的静态类型决定你是否可以发送消息给它,而对Objective-C来说,由动态类型来决定。Simula67学派更安全,因为大部分错,误可以在编译时查出。而Smalltalk学派

7、更灵活,比如一些Smalltalk看来无误的程序拿到Simualr67那里就无法通过。,从很多方面来看,C+和Objective-C的差别,与其说时技术上的,不如说是思维方式上的。你是否想更安全而舍弃灵活性?Simular67学派的支持者声称既然程序设计出色何必再要灵活性,而Smalltalk学派则辩称为了灵活可以容忍运行时多出错。,Objective-C简明教程,思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯,前言,开始学习前,假设你已经具备了一些C语言的基础知识,包括变量类型、函数、返回值、以及指针的相关概念。如果对这些还不了解,建议首先学习谭浩强的C程序设计。,Object

8、ive-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。,imp

9、ortvsinclude:就如同你在,思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯,helloworld范例中看到的,我们使用了import。import由g编译器支援。我并不建议使用include,import基本上跟.h档头尾的ifndefdefineendif相同。许多程式员们都同意,使用这些东西这是十分愚蠢的。无论如何,使用import就对了。这样不但可以避免麻烦,而且万一有一天g把它拿掉了,将会有足够的Objective-C程式员可以坚持保留它或是将它放回来。偷偷告诉你,Apple在它们的程式码中也使用了import。所以万一有一天这种事真的发生,不难预料Apple将

10、会提供一个支援import的g,分支版本。,Objective-C中,method及message这两个字是可以互换的。不过messages拥有特别的特性,具体区别在後面介绍。,编译helloworld,hello.m,import,intmain(intargc,constchar*argv),思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯,printf(helloworldn);,return0;,输出,helloworld,在Objective-C中使用import代替,include,Objective-C的预设副档名是.m,创建classeinterface,基,于,P

11、rogramminginObjective-C,Copyright(C)2004bySamsPublishing一书中的范例,并经过允许而刊载。Fraction.himport,思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯,interfaceFraction:NSObject,intnumerator;,intdenominator;,-(void)print;,-(void)setNumerator:(int)n;,-(void)setDenominator:(int)d;,-(int)numerator;,-(int)denominator;,end,NSObject:Ne

12、XTStepObject的缩写。因为它已经改名为OpenStep,所以这在今天已经不是那麼有意义了。,继承(inheritance)以Class:Parent表示,就像上面的Fraction:NSObject。,思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯夹在interfaceClass:Parent.中的称为instancevariables。,没,有,设,定,存,取,权,限,(protected,public,private)时,预设的存取权限为protected。设定权限的方式将在稍後说明。Instancemethods跟在成员变数(即,instancevariables

13、),後,。,格,式,为:scope(returnType)methodName:(parameter,1Type)parameter1Name;scope,有,class,或,instance两种。,instancemethods,以,-,开,头,classlevelmethods以+开头。Interface以一个end作为结束。原生的HelloWorld代码importintmain(intargc,constchar*argv)NSAutoreleasePool*pool=NSAutoreleasePoolallocinit;,思绪飞奔的黎明,一股股倾斜的香气从不知名的地方飘来,像麦的纯,/insertcodehere.,NSLog(Hello,World!);,pooldrain;,return0;,以上是Xcode开发环境下默认的.m文件内容,就是原生的HelloWorld范例代码。,关于hel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论