ObjectiveC最新汉化版全集教程_第1页
ObjectiveC最新汉化版全集教程_第2页
ObjectiveC最新汉化版全集教程_第3页
ObjectiveC最新汉化版全集教程_第4页
ObjectiveC最新汉化版全集教程_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、PageObjective-C Beginner's Guide目录l 始吧0下载这篇教学°设定环境刖,° 编译 hello worldl 创立 Classes° interface° implementation0把它们凑在一路l详细说明0多重参数°建构子(Constructors )0存取权限° Class level access°异样情形(Exceptions )处置l继承、多型(Inheritance, Polymorphism )和其它对象导向功能° id型别继承(Inheritance)动态识

2、另1J( Dynamic types )° Categories° Posing° Protocolsl内存治理° Retain and Release (保存与释放)° Dealloc° Autorelease Pooll Foundation Framework Classes° NSArray° NSDictionaryl优势与缺点l更多信息开始吧Page 2Objective-C Beginner's Guide页码,2/43o设定环境n Linux/FreeBSD:安装 GNUStepn为了编译G

3、NUstep应用程序,必需先执行位于 /usr/GNUstep/System/Makefiles/ 的那个档案.那个途径取决于你的系统环境,有些是在/usr, some/usr/lib ,有些是/usr/local.假设是你的 shell是以csh/tcsh为根底的 shell,那么应该改用.建议把那个指令放在 .bashrc或.cshrc中.n Mac OS X:安装 XCoden Windows NT :安装 cygwin 或 mingw ,然后安装 GNUStepo 前言n这篇教学假设你已经有一些大体的C语言知识,包才C数据型别、什么是函式、什么是回传值、关于指针的知识和大体的C语言内存

4、治理.假设是您没有这些背景知识,我超级建议你读一读 K&R的书:The C ProgrammingLanguage 译注:台湾出版书名为C程序语言第 版这是C语言的设计者所写的.n Objective-C,是C的衍生语言,继承了所有 C语言的特性. 是有一些例外,可是它们不是继承于 C的语言特性本身.n nil :在C/C+你或许曾利用过 NULL ,而在 Objective-C 中 那么是nil.不同之处是你能够传递讯息给nil例如nil message;,这是完全合法的,但是你却不能对NULL依样画葫芦.n BOOL : C没有正式的布尔型别,而在 Objective-C 中也不

5、是真的有.它是包括在Foundation classes 大体类别库中即import ; nil也是包括在那个标头档内.BOOL在Objective-C中有两种 型态:YES或NO,而不是 TRUE 或 FALSE.n #import vs #include :就犹如你在 hello world 范例中看到的, 咱们利用了#import.#import 由gcc编译器支持.我并非建议利用#include, #import 大体上跟.h档头尾的#ifndef #define #endif 相同.许多程序员们 都同意,利用这些东西这是十分愚蠢的.不管如何,利用 #import就对了. 如此不但能够

6、避gccObjective-C免麻烦,而且万一有一天把它拿掉了,将会有足够的程序员能够坚持保存它或是将它放回来.偷偷告知你,Apple在它们官方的程序代码中也利用了 #import .因此万一有一天这种事真的发生,不难预料Apple将会提供一个支持#import的gcc分支版本.n在 Objective-C 中,method及message这两个字是能够互 换的.只是 messages拥有专门的特性,一个message能够动态的转送给另一个对象.在 Objective-C中,呼对象上的一个讯息并非必然表示对象真的会实作 那个讯息,而是对象明白如何以某种方式去实作它,或是转送给明白如何实作的对象

7、.o 编译 hello world nS#import <>SSint main( int argc, const char *argv口)Sprintf( "hello worldn");桌面 Objective-C Begi. 2021-2-6PDF created with pdfFactory Pro trial versionPage 3return 0;)n输出hello worldn 在 Objective-C 中利用 #import 代替 #includen Objective-C 的预设扩展名是.m创立 classeso interface20

8、04n 基于"Programming in Objective-C," Copyright by Sams Publishing 一 中的范例,并通过许诺而刊载.nS#importFoundation/Sinterface Fraction: NSObject Sint numerator;Sint denominator;S)SS-(void) print;S-(void) setNumerator: (int) d;S-(void) setDenominator: (int) d;S-(int) numerator;S-(int) denominator;Sendn N

9、SObject : NeXTStep Object的缩写.由于它已经更名 为OpenStep,因此这在今天已经不是那么成心义了.n继承(inheritance )以Class: Parent表示,就像上面的 Fraction: NSObject.n 夹在 interface Class: Parent . 中的称为 instance variables.n没有设定存取权限(protected, public, private )时,预 设的存取权限为protected o设定权限的方式将在稍后说明.n Instance methods 跟在成员变数 (即 instance variables)

10、后.格式为:scope(returnType)methodName:(parameter1Type)parameterIName;instancen scope 有 class 或 instance 两种. methods 以- 头,class levelmethods 以 + 头.n Interface以一个end作为终止.o implementation2004n 基于"Programming in Objective-C," Copyright by Sams Publishing 一 中Begi.and桌 面 Objective-C2021-2-6PDF creat

11、ed with pdfFactory Pro trial versionPage 4GuideObjective-CBeginner's页码,4/43的范例,并通过许诺而刊载.nS#import ""S#import <>SSS denominator );SSSSSSSSSSSSSSSSS©implementation Fraction-(void) print printf( "%i/%i", numerator,)- (void) setNumerator: (int) n numerator = n;)- (void

12、) setDenominator: (int) d denominator = d;)- (int) denominator return denominator;)- (int) numerator return numerator;)endn Implementation ©implementation ClassName 开 始,以end终止.n Implement概念好的 methods的方式,跟在interface 中宣告时很近似.o把它们凑在一路n基于 "Programming in Objective-C," Copyright 2004 by Sa

13、ms Publishing 一 中的范例,并通过许诺而刊载.nS#import <>S#import ""SSint main( int argc, const char *argv)(S.2021-2-6PDF created with pdfFactory Pro trial versionPage 5Objective-CBeginner'sGuide页码,5/43frac print;Sprintf( "n");SS.o多重参数n目前为止我还没展现如何传递多个参数.那个语法乍看之下不是很直觉,不过它却是来自一个十分受欢送的Sm

14、alltalk版本.n 基于"Programming in Objective-C," Copyright 2004 by Sams Publishing 一 中的范例,并通过许诺而刊载.nS.S-(void) setNumerator: (int) nandDenominator: (int) d;S-(void) setNumerator: (int) nandDenominator: (int) d 桌面 Objective-C Begi.2021-2-6PDF created with pdfFactory Pro trial versionPage 6Object

15、ive-CBeginner'sGuide页码,6/43Snumerator = n;Sdenominator = d;SnS#import <>S#import ""SS.2021-2-6PDF created with pdfFactory Pro trial versionPage 7Objective-CBeginner'sGuide页码,7/43 略label名称,但以:区隔参数.并非建议如此利 用.o 建构子(Constructors )n基于"Programming in Objective-C," Copyrig

16、ht 2004 by Sams Publishing 一 中的范例,并通过许诺而刊载. n S.S-(Fraction*) initWithNumerator: (int)n denominator: (int) d;SS n denominator: (int) d SSSS andDenominator: d;SSSS-(Fraction*) initWithNumerator: (int) self = super init;if ( self ) self setNumerator: nreturn self;nSSS#import <>#import "&quo

17、t;2021-2-6PDF created with pdfFactory Pro trial versionPage 8Objective-C页码,8/43SSSSSSSSPDF created with pdfFactory Pro trial versionBeginner'sGuidefrac2 print;printf( "n");printf( "Fraction 3 is:");frac3 print;printf( "n");2021-2-6Page 9Objective-CBeginner'sGuid

18、e页码,9/43Sprivateint privateVar;int privateVar2;protectedint protectedVar;)#import ""©implementation Access#import ""#import <>int main( int argc, const char *argv)Access *a = Access alloc init;SSSSendnSSSendnSSSS(SS2021-2-6PDF created with pdfFactory Pro trial versionG

19、uidePageObjective-CBeginner's页码,10/43SSstatic int count;SSinterface ClassA: NSObjectS+(int) initCount;S+(void) initialize;endnS#import ""SSimplementation ClassAend-(id) init self = super init;count+;return self;+(int) initCount return count;+(void) initialize count = 0;#import "&q

20、uot;#import <>ClassA *c1 = ClassA allocinit;SClassA *c2 = ClassA allocinit;SS.2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CBeginner'sGuide页码,11/43n outputSClassA count: 2ClassA count: 3n static int count = 0; 这是 class variable 宣告的方式. 其 实这种变量摆在那个地址并不睬想,比拟好的解法是像Java实作s

21、tatic classvariables的方式.但是,它确实能用.n +(int) initCount; 这是回传count值的实际 method.请注 意这细的不同!这里在type前面不用减号-而改用加号 +.加号+表示 这是一个 class levelfunction o (译注: 许多文件中,class level functions 被称为 class functions 或class method)n存取那个变数跟存取一样成员变数没有两样,就像 ClassA 中的 count+ 用法.n +(void) initialize method is 在 Objective-C 开始执行你

22、 的程序时被呼,而且它也被每一个 class呼.这是初始化像咱们的count这种 class level variables 的好地址.o 异样情形(Exceptions)n注意:异样处置只有Mac OS X以上才支持.n 基于"Programming in Objective-C," Copyright 2004 by Sams Publishing 一 中的范例,并通过许诺而刊载.n#import <Foundation/>Sinterface CupWarningException:NSExceptionend n S#import "SS

23、69;implementation CupWarningExceptionend n S#import <Foundation/>SS©interface CupOverflowException:NSExceptionend桌面 Objective-C Begi.2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CBeginner'sGuide页码,12/43S#import ""SSimplementationCupOverflowExceptionendn

24、S#importFoundation/SSinterface Cup: NSObject Sint level;S)S-(int) level;S-(void)setLevel:(int)l;S-(void)fill;S-(void)empty;S-(void)print;endnS#import ""S#import ""S#import ""S#importFoundation/S#importFoundation/SS©implementation CupS-(id) init Sself = super init;S

25、if ( self ) self setLevel: 0;S)SSreturn self;S)SS-(int) level Sreturn level;S)SS-(void) setLevel: (int) l Slevel = l;SSif ( level > 100 ) S.2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CBeginner'sGuide页码,13/43Sis above 100"reason: "The leveluserinfo: nil;Sthrow

26、 e;S else if ( level >= 50 ) S.2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CBeginner'sGuide页码,14/43Scup fill;Scup print;SSS. n还有一个finally区块,它的行为就像Java的异样处 置方式,finally区块的内容保证会被呼.and桌 面 Objective-C Begi.2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CB

27、eginner'sGuide页码,15/43n 里的 "CupOverflowException"是一个 NSString 常 数物件.在Objective-C中,符号通经常使用来代表这是语言 的衍生部份.C语言形式的字符串(C string )就像 C/C+ 一样是"String constant" 的形式,型别为char *.继承、多型(Inheritance, Polymorphism )以及其它对象导向功能o id型别n Objective-C有种叫做id的型别,它的运作有时候像 是void* ,只是它却严格规定只能用在对象.Object

28、ive-C与Java跟C+不一样,你在呼一个对象的method时,并非需要明白那个对象的型别.固然 那个method必然要存在,这称为 Objective-C的讯息传递.n 基于"Programming in Objective-C," Copyright 2004 by Sams Publishing 一 中的范例,并通过许诺而刊载.SSSSSSSS denominator: (int) d;SSSS andDenominator: (int) d;SSendnS#import <Foundation/>interface Fraction: NSObject

29、 int numerator;int denominator;-(Fraction*) initWithNumerator: (int) n- (void) print;- (void) setNumerator: (int) d;- (void) setDenominator: (int) d;-(void) setNumerator: (int) n-(int) numerator;-(int) denominator;#import ""S#import <>SS©implementation FractionS-(Fraction*) init

30、WithNumerator: (int) ndenominator: (int) d Sself = super init;SSif ( self ) Sself setNumerator: nandDenominator: d;S)SSreturn self;S)and桌 面 Objective-C Begi.2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CBeginner'sGuide页码,16/43-(void) print S denominator );SSSSSSSSSSS andDen

31、ominator: (int) d SSSSSSSSSprintf( "%i / %i", numerator,)-(void) setNumerator: (int) n numerator = n;)-(void) setDenominator: (int) d denominator = d;)-(void) setNumerator: (int) nnumerator = n;denominator = d;)-(int) denominator return denominator;)-(int) numerator Sreturn numerator;S)end

32、 nSSSSSSSS r andlmaginary: (double) i;SSS andlmaginary: (double) i;SSS#import <Foundation/>interface Complex: NSObject double real;double imaginary;)-(Complex*) initWithReal: (double)-(void) setReal: (double) r;-(void) setImaginary: (double) i;-(void) setReal: (double) r- (double) real;- (doub

33、le) imaginary;- (void) print;endnS#import "S#import <>and桌 面 Objective-C Begi.2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CBeginner'sGuide页码,17/43 S S©implementation ComplexS-(Complex*) initWithReal: (double)r andlmaginary: (double) i Sself = super init;if

34、( self ) self setReal: randlmaginary: i;SSSSSSSSSSSSSSandlmaginary: (double) i SSSSSSreturn self;-(void) setReal: (double) r real = r;-(void) setImaginary: (double) i imaginary = i;-(void) setReal: (double) rreal = r;imaginary = i;-(double) real return real;S)SS-(double) imaginary Sreturn imaginary;

35、S)SS-(void) print Sprintf( "%_f + %_fi", real,imaginary );S)S end nS#import<>S#import""S#import""SSint main( int argc, const char*argv口)2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CBeginner'sGuide页码,18/43SSntValue()就得先转型,然后才能呼那个method. o

36、 继承(Inheritance) n基于 "Programming in Objective-C," Copyright 2004 by Sams Publishing 一 中 的范例,并通过许诺而刊载. nS#importFoundation/S Sinterface Rectangle: NSObject Sint width;Sint height;S-(Rectangle*) initWithWidth: (int) wheight: (int) h;S-(void) setWidth:(int) w;S-(void) setHeight:(int)h;S-(voi

37、d) setWidth: (int) w height: (int) h;S-(int) width;S-(int) height;and桌 面 Objective-C Begi.2021-2-6PDF created with pdfFactory Pro trial versionPageObjective-CBeginner'sGuide页码,19/43S-(void) print;endn#import ""SSSS w height: (int) h SSSS height: h;SSSSSSSSSSSS#import <>©impl

38、ementation Rectangle-(Rectangle*) initWithWidth: (int) self = super init;if ( self ) self setWidth: w)return self;)-(void) setWidth: (int) w width = w;)-(void) setHeight: (int) h height = h;)S h (SSSSSSSSSSSSSS =%i", width, height );S- (void) setWidth: (int) w height: (int)width = w;height = h;

39、)- (int) width return width;)- (int) height return height;)- (void) print printf( "width = %i, height)endS#import "SSinterface Square: Rectangleand桌 面 Objective-C Begi.2021-2-6PDF created with pdfFactory Pro trial versionPage 20Objective-CBeginner'sGuide页码,20/43S-(Square*) initWithSize

40、: (int)s;S-(void) setSize: (int) s;S-(int) size;endnS#import "SS©implementation SquareS-(Square*) initWithSize: (int) s SSSSSSSSSSSSSSSSSSSSSself = super init;if ( self ) self setSize: s;)return self;)- (void) setSize: (int) s width = s;height = s;)- (int) size return width;)- (void) setWi

41、dth: (int) w self setSize: w;)S-(void) setHeight: (int) h Sself setSize: h;Send nS#import""S#import""S#import<>SSint main( int argc, const char*argv ) SSSquare *sq = Square allocinitWithSize: 15;SS.2021-2-6PDF created with pdfFactory Pro trial versionPage 2Objective-CBeginn

42、er'sGuide页码,21/43Srec print;Sprintf( "n");SSprintf("Square:");Ssq print;Sprintf("n");SS.2021-2-6PDF created with pdfFactory Pro trial versionPage 22GuideObjective-CBeginner's页码,22/43classObjclassObj-(BOOL) isMemberOfClass:此对象是不是是classObj的员does the object have a

43、method named specifiecby the selector此对象是不是有叫做selector 的 methoddoes an object createdby this class have theability to respond to theselector specified selector此对象是不是是由有能力响应指定 selector的对象所产生invoke the specifiedselector on the object唤起此对象的指定selector-(BOOL) respondsToSelector: selector+(BOOL) instances

44、RespondToSelector:-(id) performSelector: selectorn所有继承自NSObject都有一个可回传一个class物件的class method.这超级近似于 Java 的 getClass() method .那个 class 对象 被利用于前述的 methods中.n Selectors在Objective-C 用以表示讯息.下一个范例 会秀出成立selector的语法.n基于 "Programming in Objective-C," Copyright 2004 by Sams Publishing 一 中的范例,并通过许诺而

45、刊载.nS#import ""S#import ""S#import <>SSint main( int argc, const char *argv ) SSSquare *sq = Square allocinitWithSize: 15;S2021-2-6PDF created with pdfFactory Pro trial versionPage 23Objective-CBeginner'sGuide页码,23/43Sif ( sq isMemberOfClass:NSObject class = YES ) Sprin

46、tf( "square is amember of object classn");SSS2021-2-6PDF created with pdfFactory Pro trial versionPage 24Objective-CBeginner'sGuide页码,24/43S.2021-2-6PDF created with pdfFactory Pro trial versionPage 25Objective-CBeginner'sGuide页码,25/43SS)SS-(Fraction*) div: (Fraction*) f SSS)SS-(Fraction*) sub: (Fraction*) f SSSS)endnS#import <>S#import ""#import ""SSint main( int argc, const char*argv ) Sand桌 面 Objective-C Begi.2021-2-6

温馨提示

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

评论

0/150

提交评论