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


  • 相关阅读:
    查看numpy中不同数据类型的表示范围
    再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(7) —— Python版本实现的《2048》游戏的TDL算法
    国产最好用的操作系统——deepin,为什么不适合生产环境
    Python list列表删除元素(4种方法)
    用Python复制文件的9个方法
    查看笔记本最大支持内存
    解决 虚拟机VMware Authorization Service未能启动的四种方法
    ubuntu安装deb时遇到Errors were encountered while processing: XXX
    VMware ubuntu虚拟机无法上网的解决办法
    Windows如何压缩tar.gz格式
  • 原文地址:https://www.cnblogs.com/AbeDay/p/5026951.html
Copyright © 2020-2023  润新知