OC学习 -- Category(类目)

category 类目,分类  
为没有源代码的类添加方法   一旦添加成功就相当于原来类具有该方法
category  包括两个部分
1: @interface + 类名(为哪一个类添加分类) + (分类名) + @end 进行方法的声明
2: @implementation + 类名(为哪一个类添加分类) + (分类名) + @end  进行方法的实现

什么是Category

Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的,在很多情形下Category也是比创建子类更优的选择。新添加的方法 同样也会被被扩展的类的所有子类自动继承。当知道已有类中某个方法有BUG,但是这个类是以库的形式存在的,我们无法直接修改源代码的时 候,Category也可以用于替代这个已有类中某个方法的实体,从而达到修复BUG的目的。然而却没有什么便捷的途径可以去调用已有类中原有的那个被替 换掉方法实体了。需要注意的是,当准备有Category来替换某一个方法的时候,一定要保证实现原来方法的所有功能,否则这种替代就是没有意义而且会引 起新的BUG。和子类不同的是,Category不能用于向被扩展类添加实例变量。Category通常作为一种组织框架代码的工具来使用。

Category的用途

1.      在不创建继承类的情况下实现对已有类的扩展。

2.      简化类的开发工作(当一个类需要多个程序员协同开发的时候,Category可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合)。

3.      将常用的相关的方法分组。

4.      在没有源代码的情况下可以用来修复BUG。

时间: 2024-10-06 19:31:17

OC学习 -- Category(类目)的相关文章

OC中协议, 类目, 时间, 延展, 属性

必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @property (nonatomic, assign) id<marryprotocol> husband; 避免Optitonal没有实现的功能 if ([_husband respondsToSelector:@selector(driver)]) { [_husband driver]; } @required//必须实现的协议, 默认协议 - (void)s

(转载)OC学习篇之---类目的概念和使用

上一篇文章介绍了OC中的@class关键字的使用,这一篇我们介绍一下,OC中的一个特有的亮点:类目 首先我们来看一下场景,如果我们现在想对一个类进行功能的扩充,我们该怎么做? 对于面向对象编程的话,首先会想到继承,但是继承有两个问题: 第一个问题:继承的前提是这个类可以被继承,因为在Java中有些类是不允许继承的,定义成final类,同样的OC中也是有不可以继承的类. 第二个问题:这个类可以被继承,但是继承我们知道是侵入性的,就是我可能只是想实现一个功能,但是继承之后,子类就会把父类的所有功能(

OC学习篇之---类目的概念和使用

上一篇文章介绍了OC中的@class关键字的使用http://blog.csdn.net/jiangwei0910410003/article/details/41774747,这一篇我们介绍一下,OC中的一个特有的亮点:类目 首先我们来看一下场景,如果我们现在想对一个类进行功能的扩充,我们该怎么做? 对于面向对象编程的话,首先会想到继承,但是继承有两个问题: 第一个问题:继承的前提是这个类可以被继承,因为在Java中有些类是不允许继承的,定义成final类,同样的OC中也是有不可以继承的类 第

Objective-C中的类目,延展,协议

Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词的时候,有种感觉这是不是学习的坎?这东西难不难?能不能学会?经过本人亲自验证,这三个东西理解起来还是蛮简单的,学过C++或者Java的小伙伴对比理解还是蛮轻松的.类目(Category)就是给已有的类扩充相应的方法,扩充的方法是公有的,类目还可以起到分模块的功能,下面会详细说到. 延展(Extens

[objective-c] 03 - 类目 延展 协议

本章主要讲解OC语言特性 类目(Category) 延展(Extension) 协议(Protocol) 1.类目 OC语言中的类目机制只有一个作用:为任何一个类添加方法 现在我们创建一个Student类 @interface Student : NSObject @property(nonatomic,strong)NSString * name; @end @implementation @end 如果想为Student类添加一个方法,现在有两种方法 直接修改Student类的源码,声明一个

OC第九节 类的扩展

1.Category  类目 ①. 类目是为系统内部的类或者是没有源代码的类添加方法,不能添加实例变量 ②. 添加的方法会被称为原类的一部分,子类照样可以使用 ③. 类目的文件名为 原名 + 文件名 (例如:NSString+Wuyaun) ④. 既可以添加实例方法,也可以添加类方法 2.extension  延展 ①. 延展是为自定义的类扩展功能的 ②. 在的.m文件上方,使用@interface关键字构建扩展 ③. 在延展中,我们既可以声明方法,也可以声明实例变量或者属性 ④. 添加的内容属

【OC学习-21】什么是类的类目category和类的延展extension?以及如何创建和注意事项

(1)什么是类目 声明一个类时,有实例变量和方法,而如果事后想增加方法的话直接在类里面添加感觉会显得杂乱无章,如果创建一个子类的话,层级多了会糊涂掉.至此,类目诞生. 从上可知,类目就是类的一个派生,你可以理解成事"只有方法,没有实例变量"的一种子类. (2)创建类目 可以和创建类一样通过New File >>> Objective-C category创建,选择从ASStudent类派生的话,如创建的名字是life,那么文件名则默认是ASStudent+life.h

OC category (分类,类目),日期类常用用法

学了这么久OC我们都知道OC中的类分为系统类和自定义的类,当我们在使用系统为我们提供的类时有时往往不能满足我们的需要,例如,字符串NSString类提供了比较字符串的方法compare,为数组排序时系统默认的是升序,当需要为数组按降序排序时,一种途径是需要新建一个类写一个降序的方法,而另一个途径就是系统提供的category(分类,类目),分类(类目,category)的目的为了给没有源代码的类添加方法(只能添加方法,不能添加实例变量),是扩充一个类功能的方式之一,为原有类扩充的方法会成为原类的

iOS设计之--OC学习总结之延展类目协议

类目:为已知的类增加新的方法:延展:通知在本类的定义里使用类目来声明私有方法:协议:协议声明了可以被任何类实现的方法.注意:这些手段只能增加类的方法,并不能用于增加实例变量,要增加类的实例变量,只能通过定义子类来间接实现.1.类目1)声明类目@interface NSString (NumberConvenience)-(NSNumber *)lengthAsNumber;@end该声明具有2个特点.首先,现有类位于@interface关键字之后,其后是位于圆括号中的一个新名称.该声明表示,类别