代码改变世界

iOS开发系列-Category

2018-04-14 16:20  iCoderHong  阅读(197)  评论(0编辑  收藏  举报

Category

Category是OC中特有的语法。Category的作用
* 可以在不修改原来类的基础上,为这个类扩充一些方法
* 一个庞大的类可以分为多个模块开发
* 一个庞大的类可以由多个人来编写,更有利于团队合作

分类的使用

分类也分为声明和实现两个部分

// ClassName制定给哪个类扩充方法
@interface ClassName (CategoryName)
// 编写扩充方法声明...
@end

@implementation Person (CategoryName)
// 编写扩充方法实现...
@end

创建分类的类名:原有类名称+分类名称

分类的注意事项

  • 分类是用于给原有类添加方法,它只能添加方法,不能添加属性(成员变量)。

  • 分类中的@propery 只会生成setter/getter方法声明,不会声明下划线成员变量。

  • 分类中如果与原有类方法同名,会覆盖原有类的方法。(不需要导入分类头文件直接覆盖)

  • 如果多个分类中都有和原中同名的方法,那么会执行方法会调用最后一个参与编译的分类方法。

类扩展

类扩展也叫做匿名分类,是Category中的一个特例,没有名字。可以为某个类扩充一些私有的成员变量和方法
类扩展写在.m中

@interface 类名()

@end

给Person类添加一个类扩展

#import "Person.h"
@interface Person()
{
    // 通过类扩展添加私有成员变量
    int _height;
}
/** 通过类扩展添加私有私有属性 自动生成setter跟getter声明跟实现 同时生成私有的下划线_age成员变量*/
@property (nonatomic, assign) int age;

// 通过类扩展声明私有方法声明
- (void)run;
@end

@implementation Person
// 通过类扩展声明私有方法实现
- (void)run
{
    
}
@end