黑马程序员-oc中分类的使用

来源:互联网 发布:软件平台使用协议 编辑:程序博客网 时间:2024/05/18 00:50
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数据的时候。写一次分类,以后拿过来用就是。 


标签: OC中的分类, UIImage实现图片拉伸, UIImage实现图片的适配屏幕加载对应图片
0 0