别人都跑了,你还在走,那么你要开始反思了,到底是怎么回事?脑袋瓜并不比别人差,手也不比别人慢。其实就是你没有选择对的行业,选择了对的行业才能超越自己,选择蓝鸥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开发技术。