@selector和 SEL 的 IMP

// - 定义类
@interface Person0 : NSObject

@end

@implementation Person0

-(void)setAge:(int)age{
    
}
@end

@interface Person1 : NSObject

@end

@implementation Person1

-(void)setAge:(int)age{
    
}
@end

// - 测试代码
Person0 *p0 = [[Person0 alloc] init];
Person1 *p1 = [[Person1 alloc] init];

SEL sel = @selector(setAge:);

Method m1 = class_getInstanceMethod([p0 class], sel);
IMP i1 =  method_getImplementation(m1);

Method m2 = class_getInstanceMethod([p1 class], sel);
IMP i2 =  method_getImplementation(m2);

NSLog(@"%p---%p---%p", sel, i1, i2);

// - 打印结果 : 
0x7fff5a283aa9---0x100001c10---0x1000018a0

// - [结论] : 在@selector()中, 同名函数的打印的地址是相同的,即是同一个内存中, 但是对于 IMP 中 同名函数不同对象的IMP 是不同的, 所以函数的实现也是不同的 (@selector(setAge:) == @selector(setAge:),  但是 method_getImplementation(class_getInstanceMethod(p1, @selector(setAge:))) != method_getImplementation(class_getInstanceMethod(p2, @selector(setAge:))) ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值