OC调用私有方法

OC调用私有方法共有以下四种方式:

以Person类为例:
#import "Person.h"
@implementation Person
- (void)privateMethod
{
    NSLog(@"privateMethod");
}
@end

一、分类

#import "Person.h"
NS_ASSUME_NONNULL_BEGIN
@interface Person (Test)
//只有声明,没有实现
- (void)privateMethod;
@end
NS_ASSUME_NONNULL_END

调用方式如下:

Person *person = [[Person alloc] init];
[person privateMethod];

二、performSelector

调用方式如下:

Person *person = [[Person alloc] init];
[person performSelector:@selector(privateMethod) withObject:nil];

三、objc_msgSend

调用方式如下:

Person *person = [[Person alloc] init];
objc_msgSend(person,@selector(privateMethod));

四、IMP

调用方式如下:

Person *person = [[Person alloc] init];
IMP imp = [person methodForSelector:@selector(privateMethod)];
    void (* tempFunc)(id target, SEL) = (void *)imp;
    tempFunc(person, @selector(privateMethod));

Link: OC调用私有方法