1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到;

当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下

// 声明

@interface  类名  (分类名称)

@end

// 实现

@implementation 类名 (分类名称)

@end

2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发;

3:分类使用注意:

  a:分类不能增加成员变量,只能对原类增加方法;

  b:分类方法实现中,可以访问原来类的成员变量;

  c:分类可以写和类同名的方法,但是这样会覆盖掉原来类的方法,导致永远访问不到原来的类的方法,所以不建议这么做;

    调用顺序:分类——找不到方法时去——>原来类——找不到方法时去——>父类;可见分类的调用优先级最高;

  d:当一个类有单个分类时,且每个分类都由同名方法,调用顺序和编译的顺序有关,最后编译的方法会覆盖先编译的方法,所以最后编译的会被调用;

分类的应用:给NSString增加方法,计算一个字符串中数字的个数;

// 在NSString+intSum.h文件中
//  对NSString类添加一个类方法和对象方法,计算字符串中整数的个数;

#import <Foundation/Foundation.h>@interface NSString (intSum)//对NSString类添加一个类方法,计算字符串中整数的个数,声明
+ (int)intSum:(NSString *)str;// 对象方法的声明
- (int)intCount;@end// 在NSString+intSum.m文件中

@implementation NSString (intSum)// 类方法的实现
+ (int)intSum:(NSString *)str
{int count = 0;for (int i = 0; i<str.length; i++) {int temp = [str characterAtIndex:i];if (temp > '0' && temp < '9') {count++;}}return count;
}// 对象方法的实现,只需调用类方法就可以了;
- (int)intCount
{return [NSString intSum:self];
}@end// 在main中测试int main()
{int sum = [NSString intSum:@"234df56"]; // 调用类方法int count = [@"234sd454545" intCount]; // 调用对象方法
NSLog(@"sum=%d, count=%d", sum, count);return 0;
}

转载于:https://www.cnblogs.com/cxbblog/p/3721288.html

OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数相关推荐

  1. oc总结 --oc基础语法相关知识

    m是OC源文件扩展名,入口点也是main函数,第一个OC程序: #import <Foundation/Foundation.h> int main(int argc, const cha ...

  2. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  3. OC基本语法、类和对象、三大特性

    第一讲     OC简介及基本语法 Objective-C简称OC是在C语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,也就是可以在OC代码中混入C语言代码,甚至是C++代码.可以使用OC ...

  4. Objective-C分类 (category)和扩展(Extension)

    1.分类(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...

  5. [OC学习笔记]分类和关联对象源码解析

    我们平时在开发的时候经常会使用分类来添加方法.协议.属性,但在添加属性的时候属性是不会自动生成成员变量的,这时候我们就需要关联对象来动态存储属性值. 分类 @interface NSObject(St ...

  6. iOS战记 ----OC基础语法之战(一)

    iOS战记  ----OC基础语法之战(一) 一个机械设计者的转行之战. 火车一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面 ...

  7. category显示html,wordpress文章.html伪静态,分类category和页面设置 - 搜外SEO问答

    最近把网站文章整顿了一番,将所有文章都伪静态了一番.文章统一增加html后缀,并且分类去掉了category,页面增加了html. 1,所有所有分类目录去掉category,安装WP No Categ ...

  8. iOS之深入解析分类Category的底层原理

    一.Category 简介 Objective-C 中的 Category 是对装饰模式的一种具体实现.它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法. 分类 Category 可以 ...

  9. OC本学习笔记Foundation框架NSString与NSMutableString

      一.NSString与NSMutableString         相信大家对NSString类都不陌生.它是OC中提供的字符串类.它的对象中的字符串都是不可变的,而它的子类NSMutableS ...

最新文章

  1. 如何使用TVM Pass Relay
  2. 在html中引用css样式表,怎么引用css样式?
  3. android layout 对齐,安卓利用TableLayout实现控件列对齐
  4. C#中创建文件并追加内容和换行
  5. 在ACCESS中使用Group By语句
  6. IoT安全系列-如何发现攻击面并进行测试(物联网安全)
  7. 团队第一阶段冲刺——第九天
  8. Anroid 开发so文件找不到问题-例高德地图SDK提示com.autonavi.amap.mapcore.MapCore.nativeNewInstance问题
  9. 易语言黑月c编译器,易语言黑月编译器
  10. 如何打开计算机本地组策略编辑器
  11. 浮点运算方法和浮点运算器
  12. 运维:你们 JAVA 服务怎么又又又又出问题了,内存降不下来。
  13. ARM APCS 学习笔记
  14. APA系统中超声波雷达的安装调试使用说明
  15. unity物理碰撞检测和触发器碰撞检测的区别
  16. vue2+electron 给大家说个相声
  17. poj解题报告——poj 1528 Perfection
  18. 我们是如何管理蓝精灵协会 PFP 集合的程序性生成的?
  19. 让你的电脑运行飞快 鼠标右键菜单清理
  20. hive加减月份,获取上个月日期(前几个月)

热门文章

  1. JVM并行收集器ParNew、Parallel相关参数
  2. Java客户端操作elasticsearch--查询索引库(高亮显示)
  3. Postman中几个body请求格式区别及使用说明
  4. python中int函数规则_python数字规则和内建函数
  5. 卸载LINUX自带的JDK——linux-jdk-java
  6. 什么是TCP三次握手?
  7. Linux 下 MediaWiki 的安装使用
  8. 强化学习6——Value-based RL和Policy-based RL 的区别
  9. xil_printf打印遇到的问题
  10. mac系统python写文件_Mac中py文件转为.command文件,双击运行