• Objective-C:Category


      Category可以在不需要创建子类或是修改原始类的基础上,动态为已经存在的类添加新的行为(方法),,这样可以保证类的原始设计规模较小,功能增加时再逐步扩展;实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。Category只能扩展方法,不能增加成员变量。方便团队合作时进行模块化开发。

    使用场景:

    • 在定义类时的某些情况下(例如需求变更),你可能想要为其中某个或几个类添加新的方法;
    • 一个类中包含了许多不同种类的方法需要实现,而这些方法需要不同的团队成员去实现;
    • 在使用某些基础类库时,有可能希望实现一些自己需要的方法,比如写个NSString+JSON.h,为NSString这个类拓展一些解析JSON的方法;
    //Catelogy的定义:
    
    //定义NSString+JSON.h头文件
    #import <Foundation/Foundation.h>
    @interface NSString (JSON)
    + (NSString *)json;
    @end
    
    //定义NSString+JSON.m实现文件
    #import "NSString+JSON.h"
    @implementation NSString (JSON)
    + (NSString *)json {
    return @"{'id':10, 'name':'lyf'}";
    }
    @end
    
    //使用Catelogy:
    #import "NSString+JSON.h" 
    //一定要先引用其头文件,如果是对自定义类的方法进行扩展,这里还需引用原始类的头文件
    int main(int argc, const char * argv[])
    {
        @autoreleasepool { 
            NSLog(@"%@", [NSString json]);
        }
        return 0;
    }

    使用注意:

    • Category可以访问原始类的实例变量,但不能添加变量,如果想添加变量,可以考虑继承创建子类;
    • Category可以重载原始类的方法,但不推荐这么做,因为这样会覆盖原来的方法,导致无法访问原来的方法。如果需要实现重载,建议创建子类。
  • 相关阅读:
    SOA概念误解实施要点
    Visual Studio 2008 和 .NET Framework 3.5 Service Pack 1 Beta 发布
    【翻译】使用LINQ来简化编程的7个技巧
    我对SOA的认识以及心得
    《SQL Server 2005范例代码查询辞典》出版
    Security Tutorials系列文章以及AJAX系列文章
    代朋友发招聘信息,C++程序员
    二叉树相关算法
    最近项目的一些心得(纯贴代码)
    大型互联网网站架构心得之一:分
  • 原文地址:https://www.cnblogs.com/yif1991/p/5065127.html
Copyright © 2020-2023  润新知