objectc基础_第1页
objectc基础_第2页
objectc基础_第3页
objectc基础_第4页
objectc基础_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

object c基础文件类型说明:.h 头文件,用于定义类、实例变量及类中的方法等定义信息(interface)。.m源文件,定义方法体,可实现objce-c和c方法(implementation)。.mmc+源文件引用头文件:可通过#import关键字引入想要使用的头文件,该关键字作用通#include相同,不过import会确保每个文件只会被引用一次。object-c中类的定义有两部分:interface和implementationinterface部分包含类的定义以及实例变量和方法。interfache通常定义在.h(头)文件中;implementation部分包含方法的实现部分(方法体),implementation通常定义在.m(源)文件中。1 interface MyClass : NSObject2 3 int count;4 id data;5 NSString* name; 6 7 -(id)initWithString:(NSString*)aName;8 +(MyClass*)createMyClassWithString:(NSString*)aName;9 end在上述代码中,包含了以下信息:名为MyClass的类,继承于Cocoa框架中的NSObject类;定义了3个成员变量:count、data和name(protected)以及声明了2个方法实例变量也可以放到源文件中定义,如: 1 / 源文件中的:NSObject为可选,一般情况下不用写 2 implenmentation MyClass :NSObject 3 4 int count; 5 int data; 6 NSString *name; 7 8 9 -(id)initWithString:(NSString*)aName10 11 . 12 但需要注意的是,若成员变量定义在源文件中而非头文件中,则变量的访问权限都为private.object-c支持强类型和弱类型两种方式定义一个对象变量: 强类型定义时变量类型即类命,且为指针类型 弱类型定义使用id型定义1 MyClass *myObject; / 强类型定义2 id myObject; /弱类型定义方法的定义和引用:Object-C中的方法同其它面向对象语言一样,分两种方法:实例方法(-)和类方法(+)(静态方法)。实例方法需要通过类的实例去调用,而静态方法可直接通过类名去调用。1 - (void)insertObject:(id)anObject atIndex:(NSUInter)index;上述代码中定义了一个名为insertObject:atIndex的实例方法,该方法无返回值,并定义了2个形参,类型分别为id和NSUInter。在定义一个方法时,也可以不指定参数名,如:1 / 声明一个没有参数名的方法2 -(int) set: (int) n: (int) d;3 4 / 方法调用5 object set : 4 : 5;方法的调用:在Object-C中,调用一个方法叫做发送消息,方法调用语句定义在中括号中:1 myArray insertObject:anObject atIndex:0;为了避免生成大量的临时变量,Object-C允许嵌套调用方法,使一个方法的返回值当作另一个方法的参数,如:1 myAppObject theArray inserObject:myAppObject objectToInsert atIndex:0;成员变量:默认情况下,Object-C中的成员变量为protected,可通过public,private关键字修改成员变量的可见性(只有成员变量拥有这些属性)。 1 interface MyObject : NSObject 2 3 / 成员变量要定义在大括号中 4 public int n1; 5 private int n2; 6 protected int n3; 7 8 . 9 end10 11 / 通过类实例访问public的成员变量:12 MyObject *mo = MyObject alloc init;13 mo-n1;若要访问受保护的成员变量,需要在类中定义相应的get和set方法,通过类实例调用这些方法来达到访问或设置这些成员变量的目的。访问器:在Object-C中,提供了property和synthesize两个关键字,通过这两个关键字,可以高效的为每个指定的成员变量设定set方法和get方法,称为属性 1 / 头文件 2 interface MyObject : NSObject 3 4 property int n1, n2; 5 6 . 7 end 8 9 / 源码文件10 implementation MyObject11 12 synthesize n1, n2;13 .14 end在上述代码中,Object-C会自动创建4个方法:n1、n2、setN1和setN2。可通过对象实例直接调用这4个方法MyObject *mo = MyObject alloc init;int l_n1, l_n2;mo setN1:4;mo setN2:8;l_n1 = mo n1;l_n2 = mo n2;Object-C也支持使用.符号来访问properties1 mo.n1 = 5;这种方式同样适用于调用方法变量范围Object-C中的变量范围同C一样,在中定义的变量属于本地变量,只能在中使用,本地变量默认初始化值为nil。同样方法的传值方式是传值引用,但当传递对象时是地址引用。Object-C中也支持静态变量,通过static关键字,如:1 static int n = 0;静态变量默认初始值为0,同C一样。注:静态变量同样只能在定义的范围内使用。self变量相当于java中的this。继承Ojbect-C中的继承同java相同,都是单一继承关系,要继承一个类,可写作:1 interface ClassA : NSObject2 3 end其中NSObject类是最顶层类,一般所有类的最终父类都是它。在子类中可以访问父类中的非private变量的实例变量和方法(静态方法和实例方法)。注:只能访问非private属性的成员变量,说明该变量必须定义在interface中(类的声明中),因为在implementation中声明的成员变量全部都是private。在子类中通过super访问父类中的方法,如:1 super init;NSObject类常用方法:方法名说明-(BOOL) isKindOfClass: class-objectIs the object a member ofclass-objector a descendant?-(BOOL) isMemberOfClass: class-objectIs the object a member ofclass-object?-(BOOL) respondsToSelector: selectorCan the object respond to the method specified byselector?+(BOOL) instancesRespondToSelector:selector Can instances of the specified class respond to selector? +(BOOL)isSubclassOfClass: class-object Is the object a subclass of the specified class? -(id) performSelector: selector Apply the method specified byselector. (id) performSelector: selectorwithObject: object Apply the method specified byselectorpassing the argument object. -(id) performSelector: selectorwithObject: object1 withObject:object2 Apply the method specified byselectorwith the arguments object1 and object2.class-object是一个类对象,通过class方法生成,可通过类名和实例名调用class方法生成,如: 1 Square class; / Square 是一个类名 2 mySquare class; / mySquare 是一个实例 3 4 / 验证两个实例是否属于同一个类 5 if (obj1 class = obj2 class) 6 7 . 8 9 10 / 验证myFan是否属于Fraction,即是否是Fraction的实例11 myFan isMemberOfClass: Fraction classselector是一个SEL类型的变量(C中的函数指针),直接通过selector生成 ,如:/ 为alloc方法生成一个SEL类型变量selector (alloc)selector (setTo:over:)/ 查看Fraction类中是否含有setTo:over方法/ 该方法也去父类中查找Fraction instancesRespondToSelector: selector(setTo:over);通过performSelector动态调用函数: 1 implementation Fraction 2 -(void) setTO:(int) a Over:(int)b 3 4 . 5 6 -(void) print 7 8 / 通过performSelector方法调用setTo:Over 9 / 传递2个整数参数4和510 self performSelector:selector(setTo:Over) withObject:4 withObject:511 12 end1 if (graphicObject respondsToSelector: action = YES)2 graphicObject performSelector: action3 else4 / error handling code here异常使用try和catch捕获异常:1 try2 3 .4 catch(NSException *exception)5 6 .7 8 / 可选的放置一个finally,该语句无论是否有异常发生,都会执行编写类的构造函数可为一个类编写多个不同的初始化函数,实例化类时通过指定不同的初始化函数执行不同的初始化操作1 -(Fraction *) initWith: (int) n over: (int) d 2 self = super init;3 if (self)4 self setTo: n over: d;5 return self;6 重写init方法 1 /* 2 * 注,该方法应该返回id类型, 3 * 而不是指定的类的类型 4 * 如果其它类继承自该类,初始化子类时候返回的类型就会不正确 5 */ 6 7 -(id) init 8 9 return self initWith:0 over:0;10 在类外部定义的变量会成为全局变量,在任何类和方法中(包括其它文件)中都可以访问这个变量。关键字extern可用来在类和方法内部访问全局变量,同PHP的global类似,但切记:extern是声明,而不是定义。在变量前使用extern关键字,并不会为该变量分配内存,仅仅是将该变量标识为全局变量,所以不可以在使用ex

温馨提示

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

评论

0/150

提交评论