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的字符串拼接 往往只 ...
随机推荐
- C语言下的错误处理问题
今天来分享我认为比较好的几种在C语言下的错误处理方式 方式一: int example(int num) { ) { ; } ; } 在不符合条件的情况下使用return终止程序 方式二: void ...
- C语言/C++对编程学习的重要性!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 工作和面试中的gdb
gdb是C/C++程序员必备的专业技能,工作中gdb最常用的场景有两个,一个是分析core文件,另一个是调试程序. 分析core文件的方法如下: 1.gdb 程序名 core文件名 2.bt或wher ...
- BFC与浮动
一.BFC的含义 BFC(block formatting contexts) 块级元素格式化上下文,它决定了块级元素如何对它的内容进行布局,以及与其它元素的关系和相互作用. 块级元素:父级(是一个块 ...
- Java基础——NIO(一)通道与缓冲区
一.概述 1.什么是NIO NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 在Java ...
- 20155223 2006-2007-2 《Java程序设计》第4周学习总结
20155223 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 Java的继承方法与继承类相当于程序间的数值调用,当然还有程序间函数的调动使用. 继 ...
- WPF 任务栏颜色 - 简书
原文:WPF 任务栏颜色 - 简书 先看看效果,这种效果可以用来做进度条或者消息通知闪烁. image.png image.png image.png image.png 有一个好消息 ...
- WPF Window背景半透明 ,蒙版操作实现
原文:WPF Window背景半透明 ,蒙版操作实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/detail ...
- 自己用C语言写RL78 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 之前用C实现过多款PI ...
- TMS320VC5509驱动LCD1602
1. 本次使用5509芯片的EMIF接口,先看下硬件的接口 LCD1602接口 RS(高电平1数据寄存器,低电平0指令寄存器) 接A2接口 LCD1602接口 RW(高电平读,低电平写) 接 AW ...