目标 C 中的方法旋转



我正在学习Objective-C中的方法。下面是我的旋转代码

+(void)load{
NSLog(@"Load %@",[self class]);

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{

Class class = [self class];

SEL originalSelector = @selector(viewWillAppear:);
SEL swizzlingSelector = @selector(logging_viewWillAppear:);

Method origialMethod = class_getInstanceMethod(class, originalSelector);
Method swizzlingMethod = class_getInstanceMethod(class, swizzlingSelector);

BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(swizzlingMethod), method_getTypeEncoding(swizzlingMethod));

if (didAddMethod) {
class_replaceMethod(class, swizzlingSelector, method_getImplementation(origialMethod), method_getTypeEncoding(origialMethod));
}
else {
method_exchangeImplementations(origialMethod, swizzlingMethod);
}
});
}
-(void)logging_viewWillAppear:(BOOL)animated{
[self logging_viewWillAppear:animated];
NSLog(@"Logging viewWillAppear");
}

一切正常。但是 bool didAddMethod 总是返回 NO。我想了解我们将得到的场景是什么 didAddMethod = YES。

你使用的方法是否正确?

将新方法添加到具有给定名称和实现的类。 class_addMethod将添加对超类实现的覆盖, 但不会替换此类中的现有实现。自 更改现有实现,请使用method_setImplementation。

此方法返回:

如果方法添加成功,则为"是",否则为否(例如, 该类已包含具有该名称的方法实现(。

相关内容

  • 没有找到相关文章

最新更新