【发布时间】:2018-11-30 23:44:45
【问题描述】:
我有一个带初始化方法的类 MyOldController
-(instancetype) initWithMyController: (MyController *) myController {
if((self = [self init])) {
_myController = myController;
}
return self;
}
我想将此初始化方法转换为另一个,这是我的代码
@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 不起作用。它只是调用旧的初始化方法,而不是我的新方法。
我错过了哪一点?初始化方法的调配有什么特殊的方法吗?
【问题讨论】:
标签: objective-c initialization method-swizzling