• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
yif
专注于C/C++,C#,Objective-C,GIS,空间统计,数据挖掘,智慧城市
博客园    首页    新随笔    联系   管理    订阅  订阅
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可以重载原始类的方法,但不推荐这么做,因为这样会覆盖原来的方法,导致无法访问原来的方法。如果需要实现重载,建议创建子类。
posted on 2015-12-24 15:20  mattran  阅读(213)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3