OCでは、カテゴリExtensionを使用してプライベートメソッドを呼び出します.

1424 ワード

前言
プロジェクトではCocoaPodを使って第三者ライブラリを導入し、使用中に第三者ライブラリのうちの一つのプライベートメソッドを呼び出す必要があることを発見しました.
オプションのスキームは2つあります.
  • .runtime Hookのサードパーティクルを使用する方法
  • .
  • 使用クラスでカテゴリを使って第三者ライブラリを暴露する方法
  • .
    しかし、次の第三者ライブラリが更新される可能性があることを考慮して、メンテナンスコストを低減するために、最終的に案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];
    }