OC中使用类别Extension调用私有方法

前言

项目中使用CocoaPod引入一个第三方库,使用过程中发现需要调用第三方库中的一个私有方法。

可选的方案有两个:

  1. 使用runtime hook第三方库的方法
  2. 在使用类中使用类别暴露第三方库的方法

但考虑到后续第三方库有可能会更新的问题,为了降低维护成本,最终选择了方案2。

代码类似于:

//
//  Person.h
//  TestDemo
//
//  Created by Ella on 2017/7/27.
//  Copyright © 2017年 Ella. All rights reserved.
//

#import 

@interface Person : NSObject

- (void)getMyName;

@end
//
//  Person.m
//  TestDemo
//
//  Created by Ella on 2017/7/27.
//  Copyright © 2017年 Ella. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)__init {
    NSLog(@"__init function");
}

- (void)getMyName {
    NSLog(@"I'm a humanbeing and my name is Johny");
}

@end

在调用的类中定义类别:

//
//  ViewController.m
//  TestDemo
//
//  Created by Ella on 2017/7/27.
//  Copyright © 2017年 Ella. All rights reserved.
//

#import "ViewController.h"
#import "Person.h"

@interface ViewController ()

@end

@interface Person()

- (void)__init;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    Person *person = [[Person alloc] init];
    [person getMyName];
    [person __init];
}

你可能感兴趣的:(OC中使用类别Extension调用私有方法)