zoukankan      html  css  js  c++  java
  • 类别

    1.什么是类别:

    类别就是在原有类的基础上,不通过继承的方式,添加新的方法,分散类的实现,方法的私有化

    (1)给系统原有的类添加新的方法,不能直接扩展属性

    (2)分散类的实现:如 indexpathforrow这个方法本来是nsindexpath的,但是因为经常在tableview中使用,跟表的关系特别密切,所以吧这个方法以类别的形式声明在了tableview中

    (3)方法的私有化,不在.h中声明的方法

    2.类别和继承的区别

    首先继承会创建新的类,类别不会

    继承只有子类才可以实现扩展的属性和方法

    既然说到类别不可以直接创建属性,那么就可以间接创建属性,方法

    比如我们穿件一个uiview的类别,在.h文件中,添加一个属性stringTag

    @interface UIView (StringTag)
    /*
     我们通过property描述属性
     类别可以通过写set以及get方法来实现
     扩展属性
     这是一种间接方法
     */
    @property (nonatomic,strong) NSString *stringTag;//
    @end

    .m文件

    //导入runtime
    #import <objc/runtime.h>

    //runtime
    @implementation UIView (StringTag)
    - (void)setStringTag:(NSString *)stringTag
    {
    //    @property (nonatomic,strong) NSString *stringTag;
    //    self.stringTag = @"张三";
        /*
         object:被关联的对象self
         key:属性的名字 stringTag
         value:赋值 张三
         */
        //关联Associated
        objc_setAssociatedObject(self, "stringTag", stringTag, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    - (NSString *)stringTag
    {
        //获取关联对象
    //    self.stringTag
        /*
         object:被关联的对象self
         key:属性的名字 stringTag
         注意:key与上面的key需要一致
         */
        return objc_getAssociatedObject(self, "stringTag");
        
    }
    /*

    在比如和NSString添加一个判断文件是否存在的属性

    .h文件

    @interface NSString (Extend)
    @property (nonatomic,assign,readonly) BOOL isExsits;
    @end

    .m文件

    - (BOOL)isExsits
    {
        NSFileManager *fileManager = [NSFileManager defaultManager];
        return [fileManager fileExistsAtPath:self];

    }

    */

     
  • 相关阅读:
    EggJs+Vue服务端渲染实践
    使用Charles代理功能将网络请求定向至本地文件
    iOS内存管理(一)
    RumTime实践之--UITableView和UICollectionView缺省页的实现
    CollectionView水平和竖直瀑布流的实现
    解决在HTTPS页面里嵌套HTTP页面浏览器block的问题
    利用servlet做转发,实现js跨域解决同源问题
    js将数字转换成大写的人民币表达式
    《将博客搬至CSDN》 分类: 勉励自己 2014-09-05 14:29 43人阅读 评论(0) 收藏
    jquery插件,美化select标签
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/5034870.html
Copyright © 2011-2022 走看看