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