OC基础--分类(category) 和 协议(protocol)

OC 中的category分类文件相当于 C#中的部分类;OC 中的protocol协议文件(本质是头文件)相当于 C#中的接口。今天就简单说明一下OC中的这两个文件。

由于视频中的Xcode版本低,导致了分类文件和协议文件没有找到,最后百度得知:

如图:Xcode 7.2版本中的category文件和protocol文件都归类到了Objective-C File 中

     

一、category文件:

作用:可以扩展自定义类,或者系统类。下面的实例,是扩展了NSString 类,在类中扩展了计算字符串中数字个数的方法:

NSString类的分类的头文件

1 #import <Foundation/Foundation.h>
2
3 @interface NSString (Number)
4
5 // 计算字符串中阿拉伯数字的个数
6 - (int) numberCount;
7
8 @end

NSString类的分类的.m文件

 1 #import "NSString+Number.h"
 2
 3 @implementation NSString (Number)
 4
 5 // @"abc123"
 6 - (int)numberCount
 7 {
 8
 9     //[self length];
10
11     int count = 0;
12
13     int len = (int) self.length;
14
15     for (int i = 0; i<len; i++) {
16         // 获取i位置对应的字符(char)
17        char c = [self characterAtIndex:i];
18
19        if (c>=‘0‘ && c<=‘9‘)
20        {
21            count++;
22        }
23     }
24
25     return count;
26 }
27
28 @end

main文件:

 1 #import <Foundation/Foundation.h>
 2 #import "NSString+Number.h"
 3
 4 int main(int argc, const char * argv[])
 5 {
 6
 7     @autoreleasepool {
 8
 9         NSString *str = @"abc 123fdsf090900sdfds68768867";
10
11         int count = [str numberCount];
12
13         NSLog(@"%d", count);
14     }
15     return 0;
16 }

二、protocol文件

作用:声明一系列方法

注意点:分类和协议都只能声明方法,不能声明成员变量

实例:

 1 // 声明一系列方法
 2 // 分类和协议都只能声明方法,不能声明成员变量
 3 @protocol MyProtocol
 4
 5 // 默认是@required
 6 - (void) test4;
 7
 8 @required // test1必须实现的
 9 - (void) test1;
10
11 @optional  // test2、test3是可选实现的
12 - (void) test2;
13 - (void) test3;
14
15 @end
时间: 2024-10-27 13:26:32

OC基础--分类(category) 和 协议(protocol)的相关文章

【OC基础】02-分类(Category)和协议(Protocol)

一.分类(Category) (1).分类的基础知识 分类是在不改变原有类内容的基础上,为类增加一些方法的方式. (2).分类的注意事项 1>分类只能增加方法,不能增加成员变量; 2>在分类方法的实现中可以访问原来类中的成员变量: 3>分类中可以重新实现原来类中的方法,但是这样会导致原来的方法无法在使用 4>在大规模应用中.通常把相应的功能写成分类,对原有的类进行扩充,一般分模块写,一个模块一个分类 二.分类的实现 我们可以再上一节Student类的基础上增加分类: CateStu

OC基础--ARC Category Block

autorelease 什么是自动释放池? autorelease是一种支持引用计数的内存管理方式,只要给对象发送一条autorelease消息,会将对象放到一个自动释放池中,当自动释放池被销毁时,会对池子里面的所有对象做一次release操作 自动释放池的优点是什么? 1.不用再担心对象释放的时间 2.不用再关心什么时候添加release 自动释放池的原理? autorelease实际上只是把对release的调用延迟了,对于每一个autorelease,系统只是把该对象放入了当前的autor

Arc 自动内存管理 分类Category 类扩展 Block 代码段 和 Protocol协议的一些简单知识的总结

1. Arc的使用 Arc是自动内存管理: arc的使用原则 1).只要对象没有任何强类型指针引用就会被释放’. 2).只要对象被任何强类型指针指引就不会被释放. 弱指针:__weak 被__weak修饰的指针就被称为弱型指针: 强类型指针 默认的指针都是强类型指针: 被__strong修饰的指针也是强类型指针. 使用Arc时可以重写dealloc方法,但是在重写方法时不能手动调用[super dealloc]: 在Arc中通过@property生成的属性如果是OC的对象那么要用Strong来修

黑马程序员---OC基础7【ARC概念】【ARC对象内存管理】【分类Category】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [ARC概念]   1.指针的分类 1)强指针,默认的情况下,所有的指针都是强指针,关键字strong: 2)弱指针,_ _weak关键字修饰符的指针 2.ARC概念 自动引用计数 永远不要写retain和release.autorelease三个关键字 编译器会在编译的时候自动插入retain和release.autorelease, 是一个编译器的特性:“垃圾回收”是运行时的特性 3.ARC工

八.OC基础加强--1.autorelease的用法 2.ARC下内存管理 3.分类(category)4.block的学习

1.autorelease的用法   1.自动释放池及autorelease介绍 (1)在iOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的. (2)当一个对象调用autorelease时,会将这个对象放到位于栈顶的释放池中 . 2.为什么会有autorelease? OC的内存管理机制中比较重要的一条规律是:谁申请,谁释放. 但有些情况下,开发者并不能确定某些对象何时释放.这时候就需要自动释放池. 它的好处是: (1)不需要再关心对象释放的时间 : (2)不需要再关

关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol

关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category,覆盖原类的方法,即使不引用该category头文件,也能覆盖,respondsToSelector:方法也能响应.2.category,不可以有私有变量,但是可以有@property的声明,property的声明只是声明了该类的set,get方法(需要引用该category的头文件),但是categ

类目 (category),扩展(Extension)和协议(protocol) (转)

@类目-分类(category) 1.类目: 类目(也成类别:Category)是一种为现有类添加新方法的方式2.类目的局限性:1)类目无法向已有的类中添加实例变量: 2)如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优先级高,发生这种情况,则已有类的原始方法永无天日,最好的办法是将自己扩展的方法和原始方法区分开来. 3.类目的作用:?       将类的实现分散到多个不同的文件中–      将多个类目的声明放入同一个.h文件中–      将实现放入多个.m方法中?       使

iOS开发OC基础:OC中的分类(类目)

//分类,category,(类目) //为没有源代码的类添加方法 //一定要注意,只能添加方法,不能添加实例变量 /** *  分类 类的定义也是分为接口部分和实现部分 接口部分:以@interface开头 + 类名 后跟小括号,小括号内填写的是分类名 @end结束 在@interface 与@end 之间添加方法. */ //分类为原类添加的方法,就相当于原类具有该方法,可以正常调用 因为涉及到几个分类的创建,所以就直接上传代码了,其实代码也不多,只是怕大家在建立分类的时候会混淆,所以直接把

iOS开发OC基础:OC中的协议

1.协议是一种为有源代码的类扩充方法的方式. 2.协议只是一系列方法的生命,就相当于一张任务清单,规定了要做的事情,但是具有的实施(也就是实现),是由服从该协议的类来实现.所以协议只有.h文件,并且不可以定义变量 3.协议的定义是以@protocol开头, + 协议的名字 <>(表示服从的协议)服从的协议写在<>之内,多个协议之间通过逗号来进行分隔,父协议中的内容就相当于子协议也具有这些内容,以@end结束. 下面的附件是协议的一个小例子,可以加深大家对协议的理解,看完之后一定要多