OC分类和协议

分类:

分类是给原有的类扩充一系列的方法,在不改变源代码的情况下给类添加 方法的简便方法,无需创建子类。

分类的一些注意事项:

1,分类不能添加成员变量,自能访问原始类的成员变量

2,分类可以重写原类的方法,但是这样做会导致原类的方法不能再使用

3,可以创建多个分类

4,分类声明的方法不必全都实现

5,通过分类添加方法会影响原类和其子类

原类:

#import <Foundation/Foundation.h>
@interface Fraction : NSObject
{
	int numerator;
	int denominator;
}
- (void)setTo:(int)a andOver:(int)b;
@end

通过分类的方法给Fraction添加加减乘除四个函数

#import <Foundation/Foundation.h>
//这里既有对分类接口部分的定义,也有对现有接口的扩展,所以必须包含#import "Foundation"
#import "Foundation"
//分类名称MathOps
@interface Fraction (MathOps)
- (Fraction *)add:(Fraction *)f;
- (Fraction *)sub:(Fraction *)f;
- (Fraction *)mul:(Fraction *)f;
- (Fraction *)div:(Fraction *)f;
@end

协议:

协议的声明类似于接口的声明,协议没有父类,不能自定义成员变量

一个协议的声明

@protocol Myprotocol <NSObject>
- (void)myProtocolMethod;
@end
协议是多个类共享的一个方法列表,协议中声明的方法都不用实现,

如果一个类要采用这个协议,那么必须实现,- (voidmyProtocolMethod方法

一个类采用的协议

@interface Fraction : NSObject <Myprotocol>

如果采用多个协议

@interface Fraction : NSOBject <Myprotocol,Otherprotocol>
注意:

1,如果一个类遵守了某个协议,那么它的子类也遵守这个协议

2,任何类都可以遵守某个协议

3,通过在类型名称之后的尖括号中添加协议名称,可以借助编译器的帮助来检查变量的一致性

id <Drawingprotocol> currentObject;

这是告诉编译器currentObject将包含遵守Drawingprotocol协议的对象。如果向currentObject指派静态类型的对想爱你个,这个对象不遵守Drawingprotocol协议,编译器将给出warning。

4,如果这个变量保存的对象遵守多个协议,则可以列出多项协议,如下

id <Drawingprotoco,Drawingprotocol1l> currentObject;

5,定义一项协议时,可以扩展现有的协议的定义,一下
@protocol Drawing3D <Drawing>
说明Drawing3D协议也采用了Drawing,因此采用Drawing3D协议的类都必须实现此协议流出的方法以及Drawing协议的方法

6,分类也可以采用一个协议
@interface Fraction(stuff) <NSCopying,NSCoding>
此处,Fraction拥有一个分类stuff,这个分类采用了NSCoping和NSCoding协议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值