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

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


  • 相关阅读:
    Leetcode:50. Pow(x, n)
    loj 2759「JOI 2014 Final」飞天鼠
    bzoj 3569 DZY Loves Chinese II
    CF407D Largest Submatrix 3
    bzoj 3837 pa2013 Filary
    bzoj 4722 由乃
    CF1105E Helping Hiasat
    loj 6043「雅礼集训 2017 Day7」蛐蛐国的修墙方案
    luogu P2605 [ZJOI2010]基站选址
    luogu P3226 [HNOI2012]集合选数
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4931342.html
Copyright © 2011-2022 走看看