OC的分类
1 分类就是类的补充和扩展,本质上是类的一部分,把一个类分成若干部分,每个部分就是分类。
2 语法
* 文件中的语法@interface 主类类名(分类类名)
* 文件名通常为:主类名+分类名
* 调用方法时,只需要向主类引用放送消息即可
3 使用分类的方式
* 可以给一个类增加功能(增加方法)
* 将类分成若干部分
* 分类不但可以给自定义的类添加功能,还可以给不知道源代码的类添加功能。比如NSString添加一个具体网络访问功能(访问服务器)
* 在分类中,不可以定义实例变量,也不可以定义属性,可以访问对象的属性。
我们经常遇到在开发中比如使用到一些类似于工具类的方法
场景1.我们美工做好了N张图片,分别适配os7跟os6 等等 而每张图片的名称是是一一对应的,即 os7的图片以os7结尾,os6以os6结尾。
那么这个时候我们可以给UIImage添加一个属于我们自己的分类
+ (UIImage *)imageWithName:(NSString *)name;
+ (UIImage *)imageWithName:(NSString *)name
{
if (iOS7) {
NSString *newName = [name stringByAppendingString:@"_os7"];
UIImage *image = [UIImage imageNamed:newName];
if (image == nil) { // 没有_os7后缀的图片
image = [UIImage imageNamed:name];
}
return image;
}
场景2 因为很多时候美工给我们的背景图片是需要拉伸的。众所周知,在iOS开发中,如果我们拉伸了一张图片会变形。
很多人这时候都说我们可以用UIImage的
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight这个方法来调整上下左右拉伸的长度
但是现实是我们代码中有很多地方都需要用到这个方法,我们为何不抽取出来,然后一劳永逸呢?
+ (UIImage *)resizedImageWithName:(NSString *)name
{
return [selfresizedImageWithName:name left:0.5top:0.5];
}
+ (UIImage *)resizedImageWithName:(NSString *)name left:(CGFloat)left top:(CGFloat)top
{
UIImage *image = [self imageWithName:name];
return [image stretchableImageWithLeftCapWidth:image.size.width * left topCapHeight:image.size.height * top];
}
其实分类还有很多用户,比如说我们加载网络请求的时候,处理返回的json数据的时候。写一次分类,以后拿过来用就是。