iOS培训教程之Objective C――分类和协议

别人都跑了,你还在走,那么你要开始反思了,到底是怎么回事?脑袋瓜并不比别人差,手也不比别人慢。其实就是你没有选择对的行业,选择了对的行业才能超越自己,选择蓝鸥iOS培训、把握高薪就业机会。

分类和协议

一、分类

1、分类:分类提供了一种简单的方式,用它可以将类的定义模块化到相关方法组或分类中。它还提供了扩展了现有类定义的简便方式,并且不必访问类的源代码。

2、使用方法,如:为Fraction类添加新分类

#import“Fraction.h”

@interfaceFraction(Mathops)

-(Fraction*)add:(Fraction*)f;

-(Fraction*)mul:(Fraction*)f;

-(Fraction*)sub:(Fraction*)f;

-(Fraction*)div:(Fraction*)f;

@end

注:既是接口部分的定义,也是现有接口部分的扩展。所以,必须要包含原始接口部分,这样编译器就知道Fraction类(除非直接将新分类结合到原始Fraction的头文件。

3、关于分类的一些注意事项

1>、尽管分类可以访问原始类的实例变量,但是它不能添加自身的任何变量。

2>、分类可以重载类中的另一个方法,但是,通常认为这种做法是拙劣的设计习惯。

3>、可以拥有许多分类,只要遵守此处指出的规则。

4>、和一般接口部分不同的是,不必实现分类中所有方法。

5>、通过分类添加的新方法来扩展类不仅会影响这个类,同时也会影响它的所有子类。

6>、通过分类为现有类添加新的方法可能对你有用,但它们可能和该类的原始设计或意图不一致。

7>、对象/分类命名对必须是唯一的。但是,在给定的Objective-C名称空间中,只能存在一个NSString(私有的)分类。

二、协议

1、协议:是多个类共享的一个方法列表,协议中列出的方法没有相应的实现;由其它人来实现。协议提供一种方式来使用指定的名称定义一组多少有点相关的方法。

2、定义方式:只要使用@protocol指令,之后是协议名称。

如:在标准的Foundation头文件NSObject.h中定义NSCopying协议。

@protocolNSCopying

-(id)copyWithZone:(NSZone*)zone;

@end;

3、采用协议:如果你的类采用某协议,则必须实现该协议中的一些方法。

如:采用NSCopying协议,必须实现名为copyWithZone方法

@interfaceAddressBook:NSObject(NSCopying>.

注:如果要采用多项协议,只要把它们放于尖括号中,用逗号来隔开。

4、检查一个对象是否遵循某项协议

如:一个名为currentObject对象,查看它是否遵循Drawing协议。

IdcurrentObject;

……

If([currentObjectconformsToProtool:@protocol:(Drawing)]==YES)

{

//sendcurrentObjectpaint,eraseand/oroutlinemsgs

……

}

这里使用专用的@protocol指令用于获取一个协议名称,并产生一个protocol对象,conformsToProtool:方法期望这个对象作为它的参数。

5、非正式协议(informal)

1>概念:它实际上是一个分类,列出了一组方法但并没有实现它们。

2>添加方式:使用@optional即可。

3>、采用非正式协议:不需要采用此协议的所有方法,具体取决于这项协议。

6、注意

1>协议不引用任何类,它是无类的。

2>、和类名一样,协议名必须是唯一的。

三、合成对象

1、概念:定义一个包含其他类的一个或多个对象的技术。

2、合成方式,如:定义一个带有Rectangle类的Square

@interfaceSquare:NSObject

{

Rectangle*rect;

}

-(int)setSide:(int)s;

-(int)side;

-(int)area;

-(int)perimeter

@end

3、一个解决方案是重载init或添加initWithSide之类的新方法来分配空间。

分类和协议就简单介绍到这,如果你听的明白,看的清楚的话,不想被别人远远的甩在身后的话,还不快马加鞭,紧跟社会的脚步,一起学习iOS培训课程,学习iOS开发技术。

你可能感兴趣的:(iPhone开发,手机开发,手游开发,ios培训,北京iOS培训)