首页 > 代码库 > OC的分类

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数据的时候。写一次分类,以后拿过来用就是。