objc_msgSend

objc_msgSend调用实例方法,即使是所谓私有方法


//  Dog.h
#import 

@interface Dog : NSObject

@property(nonatomic, strong) NSString * dogName;
@property(nonatomic, assign) NSInteger dogAge;

@end


//  Dog.m
#import "Dog.h"

@implementation Dog

- (instancetype)init
{
    self = [super init];
    if (self) {
        self.dogName = @"dahuang";
        self.dogAge = 2;
    }
    return self;
}

- (void) printDogName
{
    NSLog(@"dogName");
}

@end

可以看到Dog类头文件中并没有printDogName方法的声明,所以Dog类的实例是不能访问到printDogName方法的,这就是所谓的私有方法,但并不是这个方法就不能再类外进行访问了,可以通过objc_msgSend

objc_msgSend_第1张图片

虽然有警告说没有定义printDogName方法,但通过objc_msgSend方法还是访问到了。





你可能感兴趣的:(iOS-runtime,iOS-Runtime)