【发布时间】:2018-12-31 13:31:11
【问题描述】:
我正在学习运行时,当我编写以下代码时:
@implementation Son
- (instancetype)init
{
self = [super init];
if (self) {
[self performSelector:@selector(sel) withObject:nil];
}
return self;
}
id dynamicMethodIMP(id self, SEL _cmd)
{
NSLog(@"%s:dynamic method",__FUNCTION__);
return @"1";
}
+ (BOOL)resolveInstanceMethod:(SEL)sel {
class_addMethod(self.class, sel, (IMP)(dynamicMethodIMP), "@@:");
[super resolveInstanceMethod:sel];
return YES;
}
@end
它运行得很好。 但是当我编码时:
@implementation Son
id dynamicMethodIMP(id self, SEL _cmd)
{
NSLog(@"%s:dynamic method",__FUNCTION__);
return @"1";
}
+ (BOOL)resolveClassMethod:(SEL)sel {
class_addMethod(self.class, sel, (IMP)(dynamicMethodIMP), "@@:");
[super resolveClassMethod:sel];
return YES;
}
@end
//Other file
[Son performSelector:@selector(sel) withObject:nil];
它崩溃了:
+[Son sel]:发送到类 0x10da8a588 的未识别选择器
如何实现+ (BOOL)resolveClassMethod:(SEL)sel方法?
【问题讨论】:
标签: objective-c runtime