IOS中类的扩展(协议,分类)

IOS中类的扩展(协议,分类)

扩展类,我们可以使用协议和分类这两种方法,下面我们来分别实现这两种方法:
参考网址:http://www.cnblogs.com/wendingding/p/3709569.html

正式协议:

是一个命名的方法列表,它要求显示的采用协议,采用协议的方法是在类的@interface声明中列出协议的名称,此时,实现协议的类应该遵守协议,承诺实现协议中的所有方法,否则编译器将会发出警告。
协议中的方法有两类属性,@required(默认)@optional两种,@required属性的要求实现协议的类必须要实现这种方法,而@optional属性的方法则不要求,如果不确定协议是否被实现,可以使用respondsToSelector:@select()来判断。

协议的使用:

下面用代码来举例协议的使用
//协议的初始化
@protocol PSCollectionViewDelegate, PSCollectionViewDataSource;

//设置协议的指针,然后在想要使用这个协议的类中。我们为这个协议指出相关的类,然后在这个类中实现方法
@property (nonatomic, unsafe_unretained) id <PSCollectionViewDelegate> collectionViewDelegate;
@property (nonatomic, unsafe_unretained) id <PSCollectionViewDataSource> collectionViewDataSource;


//在协议的中方法的定义
#pragma mark - Delegate
@protocol PSCollectionViewDelegate <NSObject>

@optional//可选择的
- (void)collectionView:(PSCollectionView *)collectionView didSelectCell:(PSCollectionViewCell *)cell atIndex:(NSInteger)index;
- (Class)collectionView:(PSCollectionView *)collectionView cellClassForRowAtIndex:(NSInteger)index;

@end

#pragma mark - DataSource

@protocol PSCollectionViewDataSource <NSObject>

@required//必须实现的
- (NSInteger)numberOfRowsInCollectionView:(PSCollectionView *)collectionView;
- (PSCollectionViewCell *)collectionView:(PSCollectionView *)collectionView cellForRowAtIndex:(NSInteger)index;
- (CGFloat)collectionView:(PSCollectionView *)collectionView heightForRowAtIndex:(NSInteger)index;

@end


分类介绍:

概念:Category  分类是OC特有的语言,依赖于类。

分类的作用:在不改变原来的类内容的基础上,为类增加一些方法。

下面展示了一个分类的创建:
转载自:http://www.cnblogs.com/wendingding/p/3709569.html



上面展示了一个分类的创建。

分类的使用注意:

1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量

2)在分类方法的实现中可以访问原来类中的成员变量;

3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警告);

4)方法调用的优先级:分类->原来的类->父类,若包含有多个分类,则最后参与编译的分类优先;

5)在很多的情况下,往往是给系统自带的类添加分类,如NSObjectNSString,因为有的时候,系统类可能并不能满足我们的要求。

6)在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。


原文地址:https://www.cnblogs.com/AbeDay/p/5026951.html