zoukankan      html  css  js  c++  java
  • Objective-C基础笔记(4)Category

    OC中提供了一种与众不同的方式--Category,可以动态的为已经存在的类添加新的行为(方法),这样可以保证类的原始设计规模较小,功能增加时再逐步扩展。

    在使用Category对类进行扩展时,不需要创建子类,Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。

    下面我们通过三个分类例子来看一下如何使用分类:

    接着我们上一篇的代码,下面我们创建一个Student的Test分类,创建过程如下:




    注意上面的Student+Test.h和Student+Test.m这两个文件就是我们为Student类创建的分类文件

    Student+Test.h文件

    #import "Student.h"
    
    @interface Student (Test)
    
    - (void)test;
    
    @end
    Student+Test.m文件

    #import "Student+Test.h"
    
    @implementation Student (Test)
    
    - (void) test {
        NSLog(@"调用了Student的Test分类的test方法");
    }
    
    @end
    main.m文件

    #import <Foundation/Foundation.h>
    #import "Student.h"
    #import "Student+Test.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            Student *stu = [[[Student alloc] initStudent:23] autorelease];
            [stu test];
        }
        return 0;
    }
    运行结果:

    2014-11-16 11:32:00.861 内存管理[582:33690] 年龄为23的学生被创建了

    2014-11-16 11:32:00.862 内存管理[582:33690] 调用了Student的Test分类的test方法

    2014-11-16 11:32:00.862 内存管理[582:33690] 年龄为23的学生被释放了

    分类除了这种写法其实可以直接写到Student.h和Student.m中,而不用单独创建文件。我们也可以给系统的类(NSString)进行分类,比如我们给NSString添加一个处理json的方法。

    #import <Foundation/Foundation.h>
    
    @interface NSString (JSON)
    
    + (void)json;
    
    @end
    #import "NSString+JSON.h"
    
    @implementation NSString (JSON)
    
    + (void) json{
        NSLog(@"{'nam':'CodeingSnal', 'age',24");
    }
    
    @end

    分类的使用场景:

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

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

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


  • 相关阅读:
    1029. Two City Scheduling
    JS判断Android、iOS或浏览器的多种方法(四种方法)【转】
    layui select onchange事件【转】
    PHP 判断数据类型【转】
    php 对数组进行排序【转】
    php中怎么删除数组的第一个元素和最后一个元素【转】
    php数组操作之获取数组元素索引(键)值【转】
    HTML表单中 textarea标签的value属性赋值【转】
    为什么js的"关联数组"不能转成json字符串而对象可以?【转】
    CSS white-space属性是用来设置如何处理元素中的空白【转】
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468728.html
Copyright © 2011-2022 走看看