iOS 分类和扩展 category & extension

分类:对于原始类中添加更多的方法,这些添加的方法写在与原始类不同的.h、.m的文件中。也可以给系统自带的类添加分类。

1.只能添加方法。添加属性不会报错,但是不会为相应属性分配内存地址所以在操作该属性的代码的地方会奔溃,使用{}的方式添加成员变量会报错。

2.格式:

@interface 原始类名(分类名称)

@end

@implementation 原始类名(分类名称)

@end

3.一个庞大的类可分多个模块开发,由多个人来编写有利于团队合作。

4.分类中可以访问原始类的成员变量及属性、分类中也可以重写原始类中的方法,这样分类中的方法就直接替换掉了原始类中的方法,导致原始类中的方法失去作用。如果多个分类中写了同样一个方法,那么只有最后一个参与编译的才会有效。

扩展:对于一个类在非本类的.h文件或者本类的.m文件的@interface中,添加新的属性、成员变量、方法。

1.在本类的.m文件的@interface 中添加的属性、成员变量、方法,是私有的,这种扩展叫做匿名扩展。

2.在非本类的.h文件中 以

@interface 本类名 ()

@end

此种方法写的属性、成员变量、及方法,为公开的, 此种扩展为一般的扩展。

推荐阅读更多精彩内容