Category(类别)

这是Objective-C语言的一个特性,可以在不改变类名和原来类的实现的前提下,实现对类的方法扩展。

一. 如何创建类别

Category(类别)_第1张图片


Category(类别)_第2张图片


Category(类别)_第3张图片


Category(类别)_第4张图片


二. Category的作用

(1)扩展  方法 和 “类” 的方法

在.h文件中的方法

/* 从十六进制字符串获取颜色 */
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;
/** 将label的宽度调整到适应文本内容的最低值 */
- (void)adjustWidthToMin;

二.  扩展类的属性(结合runtime)

这个也是相当实用的,举个例子:我们如果要给所有UIButton都添加一个name属性,怎么破?这个时候Category又可以秀一下了(都是套路):
.h文件里定义并暴露属性

/** button的name */
@property (nonatomic,copy) NSString *name;

.m文件先导入,然后处理set和get方法

static void *strKey = &strKey;

- (void)setName:(NSString *)name{
    objc_setAssociatedObject(self, & strKey, name, OBJC_ASSOCIATION_COPY);
}

- (NSString *)name{
    return objc_getAssociatedObject(self, &strKey);
}

然后就可以使用了

你可能感兴趣的:(Category(类别))