一、类目(category):为已有的类(可以是系统类,也可以是自定义类)添加公有的新的方法;

例如:为系统已有的NSString类添加一个比较字符串大小的方法

1、创建过程:

2、NSString + CompareOfValue.h 文件:

 @interface NSString (CompareOfValue)     // 类目

 - (void)compareValueOfString:(NSString *)str;    // 声明方法

 @end

3、NSString + CompareOfValue.m 文件:

// 转为数值比较
- (void)compareValueOfString:(NSString *)str {
NSInteger num1 = self.integerValue; NSInteger num2 = [str integerValue]; if (num1 > num2) {
NSLog(@"大于");
}else if (num1 == num2) {
NSLog(@"相等");
}else {
NSLog(@"小于");
}
}

4、总结:

  • 类目的优先级高于系统自带的方法,所以如果新增的方法的方法名和系统方法名相同,程序将不会走系统方法,所以新增方法名最好和系统的区别开;
  • 类目除了能为已有的类增加新的方法,也可以为类增加新的属性,但是不能增加新的成员变量;
  • 类目中定义的二属性有声明,在其他地方可以用点语法调用,但是没有实现,所以不能赋值,如果要赋值,需要在原本的类中添加对象的成员变量,并且写明 @dynamic name(变量名),表示可以手动添加setter getter方法(比较麻烦,一般不用,类目的主要功能还是增加新的方法)。

5、补充:

  • 集合中无法打印中文,所以可以用类目为NSArray,NSDictionary等增加新的方法,实现集合中打印中文
  • 方法:打印字典和数组的时候无法识别中文,我们需要转码。注意其实如果实在我们的手机上他是以中文显示的,单独取出字典里面的中文value是中文
    字典:
    - (NSString *)descriptionWithLocale:(id)locale
    {
    // 1.定义一个可变的字符串, 保存拼接结果
    NSMutableString *strM = [NSMutableString string];
    [strM appendString:@"{\n"];
    // 2.迭代字典中所有的key/value, 将这些值拼接到字符串中
    [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [strM appendFormat:@"\t%@ = %@,\n", key, obj];
    }];
    [strM appendString:@"}"]; // 删除最后一个逗号
    if (self.allKeys.count > ) {
    NSRange range = [strM rangeOfString:@"," options:NSBackwardsSearch];
    [strM deleteCharactersInRange:range];
    } // 3.返回拼接好的字符串
    return strM;
    }
    数组:
    - (NSString *)descriptionWithLocale:(id)locale
    {
    // 1. 定义一个可变的字符串, 保存拼接结果 NSMutableString *strM = [NSMutableString string];
    [strM appendString:@"(\n"]; // 2. 迭代字典中所有的key/value, 将这些值拼接到字符串中
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [strM appendFormat:@"\t%@,\n", obj];
    }]; [strM appendString:@")\n"]; // 删除最后一个逗号
    if (self.count > ) {
    NSRange range = [strM rangeOfString:@"," options:NSBackwardsSearch];
    [strM deleteCharactersInRange:range];
    } // 3. 返回拼接好的字符串
    return strM;
    }

    上面的方法是程序运行时自动调用的方法,不需要手动调用!

Objective - C 之类目的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. Objective - C - 添加类目 - NSDate

    1.类目为系统内部的类或者是没有源代码的类添加方法,不有添加实例变量 2.添加的方法会成为原类的一部分,子类照样可以使用 3.类目的文件名为原类名+文件名 4.既可以添加实例方法,也可以添加类方法 X ...

  3. Objective-C中的类目,延展,协议

    Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...

  4. Objective C运行时(runtime)技术总结,好强大的runtime

    前言:          Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...

  5. ng-class结合三目运算

    ng-class文档:https://docs.angularjs.org/api/ng/directive/ngClass 但是在实际项目中可能会用到三目运算,实例如下: <ul> &l ...

  6. 项 目 管 理 知 识 体 系 指 南 (PMBOK2008)

    项 目 管 理 知 识 体 系 指 南 (第4版) PMBOK2008 输入 工具与技术 输出 4.项目整合管理 4.1 制定项目章程 4.1.1.1 项目工作说明书 4.1.2.1 专家判断 4.1 ...

  7. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  8. Scrapy003-项目流程

    Scrapy003-项目流程 @(Spider)[POSTS] 前两篇文章我们了解到Scrapy的原理和安装的相关知识,这节就需要知道创建项目流程的小知识. 根据官方文档:http://scrapy- ...

  9. Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法

    NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...

随机推荐

  1. MySQL优化#参数配置优化

    ( 1).查看mysql里的线程,观察是否有长期运行或阻塞的sql: show full processlist 经查看,没有发现相关线程,可排除该原因 (2).疑似mysql连接使用完成后没有真正释 ...

  2. 检测com端口代码实现

    1:scan HRESULT CDevHound::Scan(const vector<CString> &guiInfo, vector<DEV_INFO> & ...

  3. 4.28-python学习笔记(转义符&input函数)

    参考书目:<Learn Python The Hard Way> ##练习10 print("i am 6'2\"tall.")#将双引号转义 print(' ...

  4. 201555334 实验一:Java开发环境的熟悉 总结

    201555334 实验一:Java开发环境的熟悉 一.实验目的: 使用JDK编译.运行简单的Java程序: 使用Idea软件 编辑.编译.运行.调试Java程序. 二.实验内容: 编程实现让用户输入 ...

  5. 回顾RAC安装过程中对ASM的处理

    1 首先建立好节点间共享的磁盘,要注意从各节点看到的磁盘的序号.名称一致. 2 通过某一个节点,对共享磁盘进行格式化. 3 在Grid Infrastructure 中, 有一个为OCR选择存储介质的 ...

  6. 最优布线问题(wire.cpp)

    最优布线问题(wire.cpp) [问题描述] 学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来.两台计算机被连接是指它们间有数据线连接.由于计算机所处的位置不同,因此不同的两台计算机的 ...

  7. 洛谷1552 [APIO2012]派遣

    洛谷1552 [APIO2012]派遣 原题链接 题解 luogu上被刷到了省选/NOI- ...不至于吧 这题似乎有很多办法乱搞? 对于一个点,如果他当管理者,那选的肯定是他子树中薪水最少的k个,而 ...

  8. Maven学习(六)-----Maven仓库的详细介绍

    Maven仓库的详细介绍 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依 ...

  9. ESP8266 NON-OS SDK 和 RTOS SDK实现GPIO中断不同点

    ESP8266 Non-OS SDK 和 RTOS SDK 实现GPIO的方法稍有不同: 对于 Non-OS SDK,比如需要把 MTDO 配置成输入,同时下降沿触发中断: gpio_init(voi ...

  10. centos 7 安装和基本配置

    U盘安装centos 7 还是官方文档最准确. 下载centos https://docs.centos.org/en-US/centos/install-guide/downloading/ 制作安 ...