分类与类扩展(Category&Extension)

2018-11-10  本文已影响0人  Robinone

一.分类(Category)

1.适用范围

2.格式

@interface 主类类名(分类类名)
//不可以定义成员属性
@end

@implementation 主类类名(分类类名)

@end

文件名通常为:主类名+分类名
调用方法时,只需要向主类引用发送消息即可。

3.注意

4.使用范例

定义UIImage类的分类
"UIImage+Image.h"文件:

@interface UIImage (Image)
//给定一个图片名称,生成不会被渲染的图片
+ (instancetype)imageWithOriginalImageName:(NSString *)imageName;
@end

"UIImage+Image.m"文件:

#import "UIImage+Image.h"

@implementation UIImage (Image)
+ (instancetype)imageWithOriginalImageName:(NSString *)imageName
{
    //修改图片渲染模式
    UIImage *image = [UIImage imageNamed:imageName];
    image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    return image;
}
@end

5.一般不能在分类(类别)中定义成员属性

二.类扩展(Extension)

1.适用范围

扩展是分类的一种特殊形式。

2.语法格式

@interface 主类类名() 
@end

扩展通常定义在主类.m文件中,扩展中声明的方法直接在主类.m文件中实现。

3.注意

4.分类和扩展的区别

5.使用范例

定义 RBTabBar类的扩展

#import "RBTabBar.h"
@interface RBTabBar ()
@property (nonatomic, strong) UIButton *selectedBtn;
- (void)test;
@end
#import "RBTabBar.h"
@interface RBTabBar ()
@property (nonatomic, strong) UIButton *selectedBtn;
- (void)test;
@end

@implementation RBTabBar
- (void)test
{
        NSLog (@"这是一个类扩展方法");
}
@end
上一篇 下一篇

猜你喜欢

热点阅读