我有一个带有 init 方法的类 MyOldController
-(instancetype) initWithMyController: (MyController *) myController {
if((self = [self init])) {
_myController = myController;
}
return self;
}
我想将这个初始化方法转换为另一个,这是我的 swizzle 代码
@implementation MyOldController(Swizzle)
+ (void)load {
[MyOldController swizzleMethods];
}
+ (void)swizzleMethods {
method_exchangeImplementations(class_getInstanceMethod(self, @selector(initWithMyController)), class_getInstanceMethod(self, @selector(swizzle_ initWithMyController)));
}
我试着写这个
-(instancetype) swizzle_initWithMyController: (MyController *) myController {
if((self = [self init])) {
_myController = myController;
}
return self;
}
然后我将 init 方法重命名为此并更新 (void)swizzleMethods
-(instancetype) initWithMyController_swizzle: (MyController *) myController {
if((self = [self init])) {
_myController = myController;
}
return self;
}
错误消息消失但 swizzle 不起作用。它只是调用旧的初始化方法,而不是我的新方法。
我错过了哪一点?初始化方法的调配有什么特殊的方法吗?