美文网首页
8.Objective-C之Category的使用

8.Objective-C之Category的使用

作者: 峰子1994 | 来源:发表于2017-10-28 17:14 被阅读9次

    1.Category的介绍:

    Category是OC的特有的语法
    

    2.Category的使用:

    ######分类的声明:
    @interface ClassName (CategoryName)
    NewMethod; //在类别中添加方法
            //不允许在类别中添加变量
    @end
      ClassName: 需要给哪个类扩充方法
      CategoryName: 分类的名称
      NewMethod: 扩充的方法
    #############################################
    #####分类是实现:
      @implementation ClassName(CategoryName)
    
    NewMethod
    ... ...
    @end
    ClassName: 需要给哪个类扩充方法
    CategoryName: 分类的名称
    NewMethod: 扩充的方法
    

    2.Category注意点:

    1.1.分类是用于给原有类添加方法的, 它只能添加方法, 不能添加属性(成员变量)

    @interface Person (NJ)
    //{
    //    double _height;
    //}
    

    2.分类中的@property, 只会生成setter/getter方法的声明, 不会生成实现以及私有的成员变量

    //@property (nonatomic, assign) double height;
    验证方式:在main函数中调用property声明的属性,并且赋值,发现会奔溃
    

    3.可以在分类中访问类中.h的属性

    4.原类中和分类中有相同的方法,会调用分类中的方法,也就是说回忽略原类中的方法,所以开发建议,不要在分类写出原类中同名的方法。

    5.如果多个分类中都有和原类中同名的方法,那么调用该方法的时候执行谁由编译器决定,会执行最后参与编译的一个分类。 怎么看分类谁先编译呢?

    3.类扩展(Class Extension)

    匿名分类或者匿名扩展:没有名字的分类
    延展类别有称为扩展(Extendsion),是Category的一个特例。
    
    主要的作用:为某个类扩充一些私有的成员变量和方法
    写在.m文件中
    英文名是Class Extension
    类扩展书写格式
    @interface 类名 ()
    @end
    对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”
    

    4.associative的使用

      category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 法;associative,可以通过它来扩展属性;
    在iOS开发中,可能category比较常见,相对的associative,就用的比较少,要用 它必须使用<objc/runtime.h>的头文件,然后就可以自由使用objc_getAssociatedObject以及 objc_setAssociatedObject,我们来看下这两个方法:
    

    5. objc_setAssociatedObject方法

    创建关联:参数设置(源对象,关键字,关联的对象和一个关联的策略)
     objc_setAssociatedObject(id  object, const void * key, id  value, objc_AssociationPolicy policy)
    

    6.objc_getAssociatedObject方法

    获取关联:对象设置(源对象,关键字)
     objc_getAssociatedObject(id  object, const void * key )
    

    7.

    相关文章

      网友评论

          本文标题:8.Objective-C之Category的使用

          本文链接:https://www.haomeiwen.com/subject/iryspxtx.html