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 ;
}

使用注意:

  • Category可以访问原始类的实例变量,但不能添加变量,如果想添加变量,可以考虑继承创建子类;
  • Category可以重载原始类的方法,但不推荐这么做,因为这样会覆盖原来的方法,导致无法访问原来的方法。如果需要实现重载,建议创建子类。

Objective-C:Category的更多相关文章

  1. 【引】objective-c,4:category的原理

    objc_category主要参考博文: http://blog.leichunfeng.com/blog/2015/05/18/objective-c-category-implementation ...

  2. Objective-C :Category

    Category 引入 在日常的开发中,可能会碰到这样的需求:给某个类增加方法.比如说,需要给NSString类增加一个打印的方法.当然,我们可以新建一个类比如TestString,并继承NSStri ...

  3. 深入理解Objective-C:Category

    摘要 无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况.那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择.但是在Objective-C 2.0中,又提供了categ ...

  4. ios警告:Category is implementing a method which will also be implemented by its primary class 引发的相关处理

    今天在处理项目中相关警告的时候发现了很多问题,包括各种第三方库中的警告,以及各种乱七八糟的问题  先说说标题中的问题  Category is implementing a method which ...

  5. boke练习: category类的编辑修改,总是提示:该分类名称已经存在

    boke练习: category类的编辑修改,总是提示:该分类名称已经存在 本利采用的dao是: jpaRepository方式 先看原始代码: category的实体类 @Entity public ...

  6. Objective-C:分类(Category、extension)

    分类(Category .Extension) (一)分类的划分     (2) 1.(命名的类别)类别Category:只能添加新的方法,不能添加新变量.           2.(未命名的类别)类 ...

  7. AVAudioSession(3):定制 Audio Session 的 Category

    本文转自:AVAudioSession(3):定制 Audio Session 的 Category | www.samirchen.com 本文内容主要来源于 Working with Catego ...

  8. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  9. jQuery系列:Ajax

    1. load(url, [data], [callback]) 1.1 解析 载入远程 HTML 文件代码并插入至 DOM 中. 语法格式: load(url, [data], [callback] ...

随机推荐

  1. CUBRID学习笔记 45 REPLACE DELETE MERGE 教程

    c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . 过错 ------ 官方文档是英文的, ...

  2. python tools: iPython Notebook

    Introducing IPython Notebook IPython isn't a different programming language, it's just a set of comp ...

  3. python中的is、==和cmp()比较字符串

    python 中的is.==和cmp(),比较字符串 经常写 shell 脚本知道,字符串判断可以用 =,!= 数字的判断是 -eq,-ne 等,但是 Python 确不是这样子地.所以作为慢慢要转换 ...

  4. 转 iOS和android游戏纹理优化和内存优化(cocos2d-x)

    iOS和android游戏纹理优化和内存优化(cocos2d-x) (未完成) 1.2d游戏最占内存的无疑是图片资源. 2.cocos2d-x不同平台读取纹理的机制不同.ios下面使用CGImage, ...

  5. iOS - Alamofire 网络请求

    前言 Alamofire 是 Swift 语言的 HTTP 网络开发工具包,相当于 Swift 实现 AFNetworking 版本.当然,AFNetworking 非常稳定,在 Mac OSX 与 ...

  6. apecceosummit2016

    https://www.apecceosummit2016.com/program.html Thursday 17 November 2016 9:00am - 9:00pm REGISTRATIO ...

  7. 2014 Multi-University Training Contest 5

    hdu4911 max(逆序数-k,0) #include <iostream> #include<stdio.h> #include<vector> #inclu ...

  8. SDL1.2到2.0的迁移指南(转)

    里面有些单词不好翻译所以放在开头,以备查验. BLock Image Transfer, a computer graphics operation in which two bitmap patte ...

  9. OpenGL的gluLookAt观察变换函数详解

    void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez,                          GLdouble center ...

  10. 出现 could not open jvm.cfg 的解决办法

    出现该的原因很可能是由于卸载 jdk 不干净而引起的(就算是使用工具也一样),在oracle的官方上也是让我们卸载了重装一次.可是重装真的能解决问题吗?  以下方法经过本人的验证,绝对可行! (一定要 ...