分类(Category) 类扩展(Class Extensions)

使用Category需要注意的点:

(1) Category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序则会崩溃。

(2) Category理论上不能添加变量,但是可以使用@dynamic 来弥补这种不足。

Extension非常像是没有命名的类别。

Extension中的方法必须在@implementation中实现,否则编译会报错。

分类和类扩展的相似之处是:都可以为类添加一个额外的方法;

不同之处在于:要添加额外方法,分类(Category必须在第一个@interface中声明方法,并且在@implementation中提供实现,不然运行时出错。而类扩展(Class Extensions),你添加的方法是一个required API,如果不去实现,编译器会警告,而且这个方法的声明可以不在第一个@interface中去声明。

时间: 2024-10-11 11:01:09

分类(Category) 类扩展(Class Extensions)的相关文章

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

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

OC中分类、类扩展、Block、协议(由协议引出的代理模式)

一: 分类(Category) 1>Category的概念:就是在不改变原来类的基础上,为类增加一些方法 (1,可以为库中定义的类增加方法:2,可以给自己定义的类增加方           法)仅仅是方法哦 好处:一个类可以有多个文件,编译器会将这些文件按一个类除了,便于团队合作. 2> 代码格式: 自定义类中加分类 Person类 #import "Person.h" @interface Person : NSObject - (void)sayHi; @end @im

31-oc分类和类扩展

分类基本概念 书写Category的格式 // 分类的声明 @interface ClassName (CategoryName) NewMethod; //在类别中添加方法 //不允许在类别中添加变量 @end ClassName: 需要给哪个类扩充方法 CategoryName: 分类的名称 NewMethod: 扩充的方法 // 分类的实现 @implementation ClassName(CategoryName) NewMethod ... ... @end ClassName: 需

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

1.分类(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到,这点和javascript中使用原型来定义属性有点类似. 我们可以为一个类创建一个新的方法,而不需要在代码中编辑类定义. 下面就是定义并使用分类的例子程序,通过下面代码,我们可以给Object-C中的NSString 添加camelCaseString分类,使用camelCaseString方

iOS 使用分类category和扩展extension

在OC中可以对库里面的类在原有基础上进行扩展 比如对NSSting添加新的属性变量和方法,可以在xcode中新建对应的.m文件 选择对应的原有的类 然后可以选择扩展或者分类,分类会自动以+号连接,扩展会自动以_号连接,比如 "NSString+security.h" "NSString_extension.h" 扩展能够添加属性变量和方法,但只是新增一个头文件 分类可以添加方法,不能添加属性变量,有一个头文件和一个.m文件,m文件里面可以实现具体的方法 所以在分类里

类别(Category)与扩展(Extensions)

一.类别(Category) 类别(Category)是一种可以为现有的类(包括类簇:NSString...,甚至源码无法获得的类)添加新方法的方式无需从现有的类继承子类.类别添加的新方法可以被子类继承. 注:继承(inheritance)无法为一个类簇创建子类.类别不能添加实例变量. 1. 创建类别 1.1 声明类别 类别的声明和类的声明格式相似: @interface ClassName(CategoryName) //method declarations @end//CategoryNa

类别和类扩展,从入门到懵逼。

先占坑 类别,又叫类的扩展.呵呵. 分类和类扩展的相似之处是:都可以为类添加一个额外的方法:呵呵: 类扩展 (Class Extension也有人称为匿名分类) 作用: 能为某个类附加额外的属性,成员变量,方法声明 一般的类扩展写到.m文件中 一般的私有属性写到类扩展 使用格式: @interface Mitchell() //属性 //方法 @end 与分类的区别 分类的小括号中必须有名字 @interface 类名(分类名字) /*方法声明*/ @end @implementation类名(

分类(类别/Category)与 类扩展(Extension)

一.分类(类别/Category) 1.适用范围 当你已经封装好了一个类(也可能是系统类.第三方库),不想在改动这个类了,可是随着程序功能的增加需要在类中增加一个方法,这时我们不必修改主类,只需要给你原来的类增加一个分类. 将一个大型的类拆分成不同的分类,在不同分类中实现类别声明的方法,这样可以将一个类的实现写到多个.m文件中,方便管理和协同开发. 分类中的方法可以只声明,不实现,所以在协议不支持可选方法的时候(协议现在已经支持可选方法),通常把分类作为非正式协议使用. 2.语法格式 文件中的语

分类 类扩展 继承 协议 委托

分类 类扩展 继承 协议 委托 分类(Category) 不产生新类,不修改原类,但有自己的.h和.m文件 分类只能向原类中增加方法,或者重写原类的方法 声明的@property只会生成getter setter方法的声明 类.h中定义的方法必须实现,但分类.h中定义的方法,可以不实现 同名方法,分类的优先级高类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中.(2)创建对私有方法的前向引用.(类.h中未声明,但存在于.m中的私有方法,通过在分类.h中声明一下,就可以在其他类