// - 定义类
@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:))) ;
@selector和 SEL 的 IMP
最新推荐文章于 2022-08-30 09:52:38 发布