zoukankan      html  css  js  c++  java
  • Category

    OC提供了一种与众不同的方式--Catagory,可以动态的为已经存在的类添加新的行为(方法)

    这样可以保证类的原始设计规模较小,功能增加时再逐步扩展

    使用Category对类进行扩展时,不需要创建子类

    Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中

    Category的使用方法

    @interface Student: NSObject
    
    -(void) print;
    
    @end

    这是声明文件Student.h,包含一个实例方法print

    如果想在不修改原始类、不增加子类的情况下,为该类增加一个play的方法,只需要简单的定义两个文件Student+Play.h和Student+Play.m,在声明文件和实现文件中用"()"把Category的名称括起来即可

    Category的使用方法

    声明文件Student+Play.h代码如下:

    #import "Student.h"
    
    @interface Student(Play)
    
    -(void)play;
    
    @end

    实现文件Student+Play.m代码如下:

    #import "Student+Play.h"
    
    @implementation Student(Play)
    
    -(void)play{
    
        NSLog(@"Student-->play");
    
    }
    
    @end

    其中Play是Category的名称,如果用XCode创建Category,只需要填写Category的名称和要扩展的类的名称。习惯将声明文件和实现文件名称统一采用"原类名+Category名称"的方式命名

    调用也非常简单,毫无压力,如下: 

    首先引入Category的声明文件,然后正常调用即可

    #import "Student+Play.h"
    
    Student *stu = [[Student alloc] init];
    
    [stu play];

    Category的使用场景

    在定义类时的某些情况下(例如需求变更),你可能想要为其中的某个或几个类中添加新的方法

    一个类中包含了许多不同种类的方法需要实现,而这些方法需要不同团队的成员实现

    在使用基础类库中的类时,有可能希望这些类实现一些自己需要的方法,比如写个NSString+JSON.h,为NSString这个类拓展一些解析JSON的方法

    Category的使用注意

    Category可以访问原始类的实例变量,但不能添加变量,如果想添加变量,可以考虑通过继承创建子类

    Category可以重载原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法。如果确实要重载,正确的选择是创建子类

    类的私有方法

    第一种方式:直接在.m文件中写方法实现,不要在.h文件中进行方法声明

    第二种方式:在.m文件中定义一个Category,在Category中声明一些方法,然后在@implementation跟@end之间作方法实现

  • 相关阅读:
    PowerShell_零基础自学课程_7_Powershell中重定向机制、目录和文件管理
    volcanol_C语言学习趣事汇总贴
    linux_shell_2_shell 中的变量特性
    PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念
    volcanol_Linux_问题汇总系列_2_如何在linux和windows主机之间共享文件
    C语言学习趣事_你不知道的C语言应用
    volcanol_Windows_Powershell_汇总贴
    PowerShell_零基础自学课程_4_PowerShell的别名功能、错误管理功能和系统资源区域导航
    Sqlite 管理工具 SQLiteDeveloper及破解
    android建立Menu详解
  • 原文地址:https://www.cnblogs.com/chenziqiang/p/4930421.html
Copyright © 2011-2022 走看看