object

更新时间:2022-11-26 11:56:26 阅读: 评论:0


2022年11月26日发(作者:美国宣布对伊朗实施新制裁)

Objectc基础知识

文件类型说明:

.h头文件,用于定义类、实例变量及类中的方法等定义信息(interface)。

.m源文件,定义方法体,可实现objce-c和c方法(implementation)。

.mmc++源文件

引用头文件:

可通过#import关键字引入想要使用的头文件,该关键字作用通#include相同,

不过import会确保每个文件只会被引用一次。

object-c中类的定义有两部分:interface和implementation

interface部分包含类的定义以及实例变量和方法。interfache通常定义在.h(头)

文件中;

implementation部分包含方法的实现部分(方法体),implementation通常定

义在.m(源)文件中。

1@interfaceMyClass:NSObject

2{

3intcount;

4iddata;

5NSString*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@implenmentationMyClass:NSObject

3{

4intcount;

5intdata;

6NSString*name;

7}

8

9-(id)initWithString:(NSString*)aName

10{

11...

12}

但需要注意的是,若成员变量定义在源文件中而非头文件中,则变量的访问权限

都为@private.

object-c支持强类型和弱类型两种方式定义一个对象变量:

强类型定义时变量类型即类命,且为指针类型

弱类型定义使用id型定义

1MyClass*myObject;//强类型定义

2idmyObject;//弱类型定义

方法的定义和引用:

Object-C中的方法同其它面向对象语言一样,分两种方法:实例方法(-)和类方

法(+)(静态方法)。

实例方法需要通过类的实例去调用,而静态方法可直接通过类名去调用。

1-(void)inrtObject:(id)anObjectatIndex:(NSUInter)index;

上述代码中定义了一个名为"inrtObject:atIndex"的实例方法,该方法无返回

值,并定义了2个形参,类型分别为id和NSUInter。

在定义一个方法时,也可以不指定参数名,如:

1//声明一个没有参数名的方法

2-(int)t:(int)n:(int)d;

3

4//方法调用

5[objectt:4:5];

方法的调用:

在Object-C中,调用一个方法叫做发送消息,方法调用语句定义在中括号"[]"

中:

1[myArrayinrtObject:anObjectatIndex:0];

为了避免生成大量的临时变量,Object-C允许嵌套调用方法,使一个方法的返

回值当作另一个方法的参数,如:

1[[myAppObjecttheArray]inrObject:[myAppObjectobjectToInrt]atIndex:0];

成员变量:

默认情况下,Object-C中的成员变量为@protected,可通过@public,@private

关键字修改成员变量的可见性(只有成员变量拥有这些属性)。

1@interfaceMyObject:NSObject

2{

3//成员变量要定义在大括号中

4@publicintn1;

5@privateintn2;

6@protectedintn3;

7}

8......

9@end

10

11//通过类实例访问public的成员变量:

12MyObject*mo=[[MyObjectalloc]init];

13mo->n1;

若要访问受保护的成员变量,需要在类中定义相应的get和t方法,通过类实

例调用这些方法来达到访问或设置这些成员变量的目的。

访问器:

在Object-C中,提供了@property和@synthesize两个关键字,通过这两个

关键字,可以高效的为每个指定的成员变量设定t方法和get方法,称为属性

1//头文件

2@interfaceMyObject:NSObject

3{

4@propertyintn1,n2;

5}

6...

7@end

8

9//源码文件

10@implementationMyObject

11

12@synthesizen1,n2;

13...

14@end

在上述代码中,Object-C会自动创建4个方法:n1、n2、tN1和tN2。

可通过对象实例直接调用这4个方法

MyObject*mo=[[MyObjectalloc]init];

intl_n1,l_n2;

[motN1:4];

[motN2:8];

l_n1=[mon1];

l_n2=[mon2];

Object-C也支持使用"."符号来访问properties

1mo.n1=5;

这种方式同样适用于调用方法

变量范围

Object-C中的变量范围同C一样,在{}中定义的变量属于本地变量,只能在{}

中使用,本地变量默认初始化值为nil。同样方法的传值方式是传值引用,但当

传递对象时是地址引用。

Object-C中也支持静态变量,通过static关键字,如:

1staticintn=0;

静态变量默认初始值为0,同C一样。注:静态变量同样只能在定义的范围内使

用。

lf变量相当于java中的this。

继承

Ojbect-C中的继承同java相同,都是单一继承关系,要继承一个类,可写作:

1@interfaceClassA:NSObject

2

3@end

其中NSObject类是最顶层类,一般所有类的最终父类都是它。

在子类中可以访问父类中的非private变量的实例变量和方法(静态方法和实例

方法)。

注:只能访问非private属性的成员变量,说明该变量必须定义在interface中(类

的声明中),因为在implementation中声明的成员变量全部都是private。

在子类中通过super访问父类中的方法,如:

1[superinit];

NSObject类常用方法:

方法名说明

-(BOOL)isKindOfClass:class-objectIstheobjectamemberof

class-objectoradescendant?

-(BOOL)isMemberOfClass:class-objectIstheobjectamemberof

class-object?

-(BOOL)respondsToSelector:lectorCantheobjectrespondtothe

methodspecifiedbylector?

+(BOOL)instancesRespondToSelector:

lectorCaninstancesofthespecifiedclass

respondtolector?

+(BOOL)isSubclassOfClass:class-objectIstheobjectasubclassofthe

specifiedclass?

-(id)performSelector:lectorApplythemethodspecifiedby

lector.

(id)performSelector:lectorwithObject:

object

Applythemethodspecifiedby

lectorpassingtheargument

object.

-(id)performSelector:lectorwithObject:

object1withObject:object2

Applythemethodspecifiedby

lectorwiththeargumentsobject1

andobject2.

class-object是一个类对象,通过class方法生成,可通过类名和实例名调用

class方法生成,如:

1[Squareclass];//Square是一个类名

2[mySquareclass];//mySquare是一个实例

3

4//验证两个实例是否属于同一个类

5if([obj1class]==[obj2class])

6{

7...

8}

9

10//验证myFan是否属于Fraction,即是否是Fraction的实例

11[myFanisMemberOfClass:[Fractionclass]]

lector是一个SEL类型的变量(C中的函数指针),直接通过@lector生成,

如:

//为alloc方法生成一个SEL类型变量

@lector(alloc)

@lector(tTo:over:)

//查看Fraction类中是否含有tTo:over方法

//该方法也去父类中查找

[FractioninstancesRespondToSelector:@lector(tTo:over)];

通过performSelector动态调用函数:

1@implementationFraction

2-(void)tTO:(int)aOver:(int)b

3{

4...

5}

6-(void)print

7{

8//通过performSelector方法调用tTo:Over

9//传递2个整数参数4和5

10[lfperformSelector:@lector(tTo:Over)withObject:4withObject:5]

11}

12@end

1if([graphicObjectrespondsToSelector:action]==YES)

2[graphicObjectperformSelector:action]

3el

4//errorhandlingcodehere

异常

使用@try和@catch捕获异常:

1@try

2{

3...

4}@catch(NSException*exception)

5{

6...

7}

8//可选的放置一个@finally,该语句无论是否有异常发生,都会执行

编写类的构造函数

可为一个类编写多个不同的初始化函数,实例化类时通过指定不同的初始化函数

执行不同的初始化操作

1-(Fraction*)initWith:(int)nover:(int)d{

2lf=[superinit];

3if(lf)

4[lftTo:nover:d];

5returnlf;

6}

重写init方法

1/*

2*注,该方法应该返回id类型,

3*而不是指定的类的类型

4*如果其它类继承自该类,初始化子类时候返回的类型就会不正确

5*/

6

7-(id)init

8{

9return[lfinitWith:0over:0];

10}

在类外部定义的变量会成为全局变量,在任何类和方法中(包括其它文件)中都可

以访问这个变量。

关键字extern可用来在类和方法内部访问全局变量,同PHP的global类似,

但切记:

extern是声明,而不是定义。

在变量前使用extern关键字,并不会为该变量分配内存,仅仅是将该变量标识

为全局变量,所以不可以在使用extern定义变量时赋值。

枚举

Object-C支持枚举类型,格式为:

1//定义枚举

2enumflag{fal,true};

3

4//声明两个枚举变量,该枚举变量的值只能是true或fal

5enumflagendOfData,matchFound;

6

7//定义枚举

8enumdirection{up,down,left=10,right};

9

10//或

11enumboolean{no=0,fal=0,yes=1,true=1};

本文发布于:2022-11-26 11:56:26,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/24914.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:傅滢
标签:object
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图