IOS_OC_Category
1.Category概述
那的Category的使用场景有那些呢:
1、类包括了非常多个方法实现,而这些方法须要不同团队的成员来实现
2、当你在使用基础类库中的类时,你不想继承这些类而仅仅想加入一些方法时。
Category能实现上面的需求,当然也有使用Category是须要注意的问题:
1、Category能够訪问原始类的实例变量,但不能加入实例变量,假设想加入变量,那就通过继承创建子类来实现。
2、Category能够重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。假设确实要重载。那就通过继承创建子类来实现。
3、和普通接口有所差别的是,在Category的实现文件里的实例方法仅仅要你不去调用它你能够不用实现全部声明的全部方法。
2.实例
@interface NSString (PLUS) - (int)numberCount; @end @implementation NSString (PLUS) - (int)numberCount
{
int count = 0;
NSUInteger len = [self length];
for (int i=0; i<len; i++) {
unichar ch = [self characterAtIndex:i];
if(ch>='0' && ch<='9'){
count++;
}
}
return count;
} @end#import <Foundation/Foundation.h>
#import "NSString+PLUS.h" //import int main(int argc, const char * argv[])
{
NSString *s = @"ad7a8da9d9a1d1";
NSLog(@"%@ len = %d", s, [s numberCount]); return 0;
}
3.类别的作用
(1)能够将类的实现分散到多个不同文件或多个不同框架中。方便代码管理。也能够对框架提供类的扩展(没有源代码,不能改动)。
(2)创建对私有方法的前向引用:假设其它类中的方法未实现,在你訪问其它类的私有方法时编译器报错这时使用类别。在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告
(3)向对象加入非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”。由于能够作为不论什么类的托付对象使用。
IOS_OC_Category的更多相关文章
随机推荐
- AndroidManifest.xml详解
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...
- Django用户认证系统
一. 认证系统概要 create_user 创建用户 authenticate 验证登录 login 记住用户的登录状态 logout 退出登录 is_authenticated 判断用户是否登录 l ...
- 关于编辑器对<input>标签报错提示“表单输入没有相关label”的问题
相信很多朋友在制作表单的时候,我们的编辑器会有下图的相关提示吧 我们发现虽然这样并不影响我们的正常使用,但是看着这样的报错提示总是很让人心烦,那么这到底是为什么呢? 其实,这是因为编辑器建议我们在使用 ...
- UVM基础之----uvm_object
uvm_void The uvm_void class is the base class for all UVM classes. uvm_object: The uvm_object class ...
- 02--Tomcat总体结构分析一
注:此文章大部分参考大神文档,并且结合自身理解,补充了其他相关知识,谢绝转载. 大神原文地址链接:http://www.ibm.com/developerworks/cn/java/j-lo ...
- JS——放大镜
放大镜: 1.比例系数要恒定:在系数为4的情况下,若原图是820*512,那么小图必须是205*128,放大镜若是50,原图显示区域必须200 2.计算鼠标在小图中的坐标 3.放大镜需要在鼠标中间位置 ...
- CNN结构:HSV中的饱和度解析
参考:颜色的前世今生-饱和度 详解,划重点- 关键这个"纯"是指什么? 是指颜色明亮么?明度高的颜色看起来也明亮啊,不一定纯度高啊- 是说颜色鲜艳么?颜色 "不鲜艳&qu ...
- 使用CSS3实现表格隔行/隔列变色
<!DOCTYPE html><html><head> <meta charset="utf-8" /> <title> ...
- VUE路由history模式坑记--NGINX
因微信分享和自动登录需要,对于URL中存在'#'的地址,处理起来比较坑(需要手动写一些代码来处理).还有可能会有一些隐藏的问题没被发现. 如果VUE能像其他(JSP/PHP)系统的路径一样,就不存在这 ...
- python包与模块
Python基础-包与模块 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含__init__.py文件). 模块搜索路径,Py ...