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的字符串拼接 往往只 ...
随机推荐
- django中的auth详解
Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等 ...
- vue相关理论知识
es6常用语法简介 es是js的规范标准 let 特点: 1.有全局和函数作用域,以及块级作用域(用{}表示块级作用域范围) 2.不会存在变量提升 3.变量不能重复声明 const 特点: 1.有块级 ...
- Leecode刷题之旅-C语言/python-383赎金信
/* * @lc app=leetcode.cn id=383 lang=c * * [383] 赎金信 * * https://leetcode-cn.com/problems/ransom-not ...
- C语言编程学习不难学,是你没找对方法!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- SDR软件无线电知识要点(三)EVM
SDR软件无线电知识要点(三)EVM 信号质量如何评估 Noise Figure (NF) or sensitivity and Error Vector Magnitude (EVM) provid ...
- 微信小程序真机预览跟本地不同的问题。原文地址:https://blog.csdn.net/qq_27187991/article/details/69664247/
微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考: 本地看不到数据,就先让本地能看到数据,再看本帖....特别提 ...
- flex tooltip css
<?xml version="1.0"?> <!-- tooltips/ToolTipStyleManager.mxml --> <mx:Applic ...
- week14课上测试
说明 本次测试老师将所有课下测试的易错题全部重新考察了一遍,虽然是第二次做,还提前复习过,还是错了很多,回到寝室发现老师还没有结束测试,43分的我又忍不住再做了一遍. 做第二遍发现了有几个题目是蓝墨云 ...
- 3-3 修改haproxy配置文件
1.需求 2.个人思路 3.个人心得 4.
- day3 直方图
1.绘制直方图 # coding=utf-8 import cv2 import numpy as np from matplotlib import pyplot as plt img1 = cv2 ...