Objective - C 之类目
一、类目(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 之类目的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- Objective - C - 添加类目 - NSDate
1.类目为系统内部的类或者是没有源代码的类添加方法,不有添加实例变量 2.添加的方法会成为原类的一部分,子类照样可以使用 3.类目的文件名为原类名+文件名 4.既可以添加实例方法,也可以添加类方法 X ...
- Objective-C中的类目,延展,协议
Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...
- Objective C运行时(runtime)技术总结,好强大的runtime
前言: Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...
- ng-class结合三目运算
ng-class文档:https://docs.angularjs.org/api/ng/directive/ngClass 但是在实际项目中可能会用到三目运算,实例如下: <ul> &l ...
- 项 目 管 理 知 识 体 系 指 南 (PMBOK2008)
项 目 管 理 知 识 体 系 指 南 (第4版) PMBOK2008 输入 工具与技术 输出 4.项目整合管理 4.1 制定项目章程 4.1.1.1 项目工作说明书 4.1.2.1 专家判断 4.1 ...
- Objective C中的ARC的修饰符的使用---- 学习笔记九
#import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...
- Scrapy003-项目流程
Scrapy003-项目流程 @(Spider)[POSTS] 前两篇文章我们了解到Scrapy的原理和安装的相关知识,这节就需要知道创建项目流程的小知识. 根据官方文档:http://scrapy- ...
- Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法
NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...
随机推荐
- 20190305-leetcode题目有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- Python学习 :多线程 --- 锁
多线程 什么是锁? - 锁通常被用来实现对共享资源的同步访问. - 为每一个共享资源创建一个Lock对象,当你需要访问该资源时,调用acquire方法来获取锁对象(如果其它线程已经获得了该锁,则当前线 ...
- PTA基础编程题目集6-3简单求和 (函数题)
6-3 简单求和 (10 分) 本题要求实现一个函数,求给定的N个整数的和. 函数接口定义: int Sum(int List[],int N) 其中给定整数存放在数组List[]中,正整数N是数组元 ...
- Hibernate学习笔记四
1 整合log4j(了解) l slf4j 核心jar : slf4j-api-1.6.1.jar .slf4j是日志框架,将其他优秀的日志第三方进行整合. l 整合导入jar包 log4j 核心包 ...
- 20155231 实验四 Android程序设计
20155231 实验四 Android程序设计 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事 ...
- 20155336 2016-2017-2 《Java程序设计》第三周学习总结
20155336 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 第四章 类与对象 定义: 对象(Object):存在的具体实体,具有明确的状态和行为. 类( ...
- day 3 局部变量 全局变量
1.局部变量 2.全局变量(死歌的大招)函数前面声明的都是全局变量 3.全局变量和局部变量的区别 1)老方法 def get_temper(): temper = 33 return temper d ...
- Session丢失——解决方案
先抄下别人的作业(原帖:http://www.cnblogs.com/zhc088/archive/2011/07/24/2115497.html) Session丢失已经是一种习以为常的问题了,在自 ...
- idea热部署时 编写Controller会接收不到参数
因为我是热部署启动服务器后才编写的request和getparameter 所以可能接收不到 重启一下服务器即可
- [二读]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 ...