一、类目(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. 20190305-leetcode题目有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  2. Python学习 :多线程 --- 锁

    多线程 什么是锁? - 锁通常被用来实现对共享资源的同步访问. - 为每一个共享资源创建一个Lock对象,当你需要访问该资源时,调用acquire方法来获取锁对象(如果其它线程已经获得了该锁,则当前线 ...

  3. PTA基础编程题目集6-3简单求和 (函数题)

    6-3 简单求和 (10 分) 本题要求实现一个函数,求给定的N个整数的和. 函数接口定义: int Sum(int List[],int N) 其中给定整数存放在数组List[]中,正整数N是数组元 ...

  4. Hibernate学习笔记四

    1 整合log4j(了解) l slf4j 核心jar  : slf4j-api-1.6.1.jar .slf4j是日志框架,将其他优秀的日志第三方进行整合. l 整合导入jar包 log4j 核心包 ...

  5. 20155231 实验四 Android程序设计

    20155231 实验四 Android程序设计 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事 ...

  6. 20155336 2016-2017-2 《Java程序设计》第三周学习总结

    20155336 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 第四章 类与对象 定义: 对象(Object):存在的具体实体,具有明确的状态和行为. 类( ...

  7. day 3 局部变量 全局变量

    1.局部变量 2.全局变量(死歌的大招)函数前面声明的都是全局变量 3.全局变量和局部变量的区别 1)老方法 def get_temper(): temper = 33 return temper d ...

  8. Session丢失——解决方案

    先抄下别人的作业(原帖:http://www.cnblogs.com/zhc088/archive/2011/07/24/2115497.html) Session丢失已经是一种习以为常的问题了,在自 ...

  9. idea热部署时 编写Controller会接收不到参数

    因为我是热部署启动服务器后才编写的request和getparameter 所以可能接收不到 重启一下服务器即可

  10. [二读]The Art of Pompeii's Influence on Neo-Classicism

    The Art of Pompeii's Influence on Neo-Classicism The discovery of Pompeii's ruins in 1599 profoundly ...