zoukankan      html  css  js  c++  java
  • Objective-C之Category的使用

    Category

    分类相关

    category是OC的特有的语法

     

    // 分类的声明

    @interface ClassName (CategoryName)
    
    NewMethod; //在类别中添加方法
            //不允许在类别中添加变量
    @end
    • ClassName: 需要给哪个类扩充方法
    • CategoryName: 分类的名称
    • NewMethod: 扩充的方法

    // 分类的实现

    @implementation ClassName(CategoryName)
    
    NewMethod
    ... ...
    @end

    ClassName: 需要给哪个类扩充方法
    CategoryName: 分类的名称
    NewMethod: 扩充的方法

    注意:

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

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

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

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

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

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

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

    所以不建议在分类声明实现很多和原类同名的方法。

    类扩展(Class Extension)

    匿名分类或者匿名扩展:没有名字的分类

    延展类别有称为扩展(Extendsion),是Category的一个特例。

    • 主要的作用:为某个类扩充一些私有的成员变量和方法
      • 写在.m文件中
      • 英文名是Class Extension

    类扩展书写格式

    @interface 类名 ()
    @end

    对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”


  • 相关阅读:
    1242 斐波那契数列的第N项
    1256 乘法逆元
    1264 线段相交
    1265 四点共面
    Uva10881 Piotr's Ants
    hdu 5438 Ponds 长春网赛1002
    CodeForces 540D Bad Luck Island 概率dp
    hdu 1281 二分图残量增广
    hdu 2444判定二分图+最大匹配
    hdu 3416 Marriage Match IV
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4931342.html
Copyright © 2011-2022 走看看