iOS开发iOS开发

iOS开发之分类与延展的区别

2018-11-20  本文已影响236人  悄然林静

1. Category(分类/类别/类目)

通过Category可以很方便的为已经封装好的类添加新方法。

1.1 Category的创建和命名

创建Category会生成.h.m两个文件.

// .h文件
#import <Foundation/Foundation.h>

@interface NSString (Addition)

@end
// .m文件
#import "NSString+Addition.h"

@implementation NSString (Addition)

@end

Category的命名常用 本类名 + 用途 格式,不继承父类,仅在括号中表明此分类的主要用途。

1.2 Category的使用场景
1.3 使用Category的注意点

2. Extension(延展)

OC2.0之后增加了Extension,可以为类添加额外的私有属性或私有方法,因此也把Extension称为匿名的Category。

2.1 Extension的创建

创建Extension仅生成.h文件。

// .h文件
#import <Foundation/Foundation.h>

@interface NSString ()

@end

实际项目中,通常不会专门创建一个Extension文件,而是寄生在.m文件中(在 .m 文件的 @interface 中定义,在 @implementation 中实现)

#import "PFWKWebView.h"
#import <WebKit/WebKit.h>

@interface PFWKWebView ()

// 私有属性
@property (nonatomic, strong) WKWebView *webView;

// 私有方法,只能在@implementation内部调用,外部不可见
- (void)setupUI;

@end

@implementation PFWKWebView

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setupUI];
}

- (void)setupUI {
    self.view.backgroundColor = UIColor.redColor;
}
PS:

注意,直接在 @interface@implementation 后接的大括号定义成员变量的情况有所不同:

#import "PFWKWebView.h"
#import <WebKit/WebKit.h>

@interface PFWKWebView () {
    NSString *_name;          // 姓名
}

@end

@implementation PFWKWebView {
    NSString *_nickName;    // 昵称
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _name = @"名字";
    _nickName = @"昵称";
}

3. Category和Extension的区别

// Category .h文件
#import <Foundation/Foundation.h>
@interface NSString (Addition)
@end

// Category .m文件
#import "NSString+Addition.h"
@implementation NSString (Addition)
@end
// Extension .h文件
#import <Foundation/Foundation.h>
@interface NSString ()
@end
上一篇下一篇

猜你喜欢

热点阅读