Category在项目中的实际运用
Posted 小敏的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Category在项目中的实际运用相关的知识,希望对你有一定的参考价值。
先看两行代码:
1.
label2.textColor = [UIColor colorWithHexString:@"707070"];
2.
_table.header = [MJRefreshHeader headerWithRefreshingBlock:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 刷新时的相关处理
});
}];
相信大家对上面的两行代码都不会陌生
- 上一行:UIColor原本是没有读取十六进制颜色值的方法的
- 下一行:UITableView原本是没有header属性的
那么,How it happened?
Because of the Category!
Category(类别)简介
- 利用Objective-C的动态运行时分配机制,可以为现有的类(自己的或系统的或三方库的)添加新方法,这种为现有的类添加新方法的方式称为类别category,他可以为任何类添加新的方法,包括那些没有源代码的类。
- 类别使得无需创建对象类的子类就能完成同样的工作。
Category的作用
一. 扩展类的方法
这是我们用的最多的,现在就以扩展UIColor
的一个读取16进制颜色的方法为例:
在.m文件中编写扩展的方法
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha { //删除字符串中的空格 NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; // String should be 6 or 8 characters if ([cString length] < 6) { return [UIColor clearColor]; } // strip 0X if it appears //如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾 if ([cString hasPrefix:@"0X"]) { cString = [cString substringFromIndex:2]; } //如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾 if ([cString hasPrefix:@"#"]) { cString = [cString substringFromIndex:1]; } if ([cString length] != 6) { return [UIColor clearColor]; } // Separate into r, g, b substrings NSRange range; range.location = 0; range.length = 2; //r NSString *rString = [cString substringWithRange:range]; //g range.location = 2; NSString *gString = [cString substringWithRange:range]; //b range.location = 4; NSString *bString = [cString substringWithRange:range]; // Scan values unsigned int r, g, b; [[NSScanner scannerWithString:rString] scanHexInt:&r]; [[NSScanner scannerWithString:gString] scanHexInt:&g]; [[NSScanner scannerWithString:bString] scanHexInt:&b]; return [UIColor colorWithRed:((float)r / 255.0f) green:((float)g / 255.0f) blue:((float)b / 255.0f) alpha:alpha]; }
在.h文件中将方法暴露出来
/* 从十六进制字符串获取颜色 */
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;
至此,扩展系统类UIColor的方法成功,需要时,导入头文件直接使用即可:
self.view.backgroundColor=[UIColor colorWithHexString:@"f7f7f9"];
二. 扩展类的属性(结合runtime)
这个也是相当实用的,举个
以上是关于Category在项目中的实际运用的主要内容,如果未能解决你的问题,请参考以下文章
Android 性能优化之 LeakCanary 的使用及项目中的实际运用
RecycleView 中使用总结以及在项目中的实际运用场景总结(持续更新)
如何将 View 类中的代码片段移动到 OnAppearing() 方法?
typescript Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming/angular-2/