zoukankan      html  css  js  c++  java
  • 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)在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。


  • 相关阅读:
    Binary Tree Paths
    Implement Stack using Queues
    Path Sum II
    Path Sum
    Plus One
    Add Digits
    Missing Number
    H-Index II
    H-Index
    Ugly Number II
  • 原文地址:https://www.cnblogs.com/AbeDay/p/5026951.html
Copyright © 2011-2022 走看看