Ich weiß, dass viele Methoden, seine Super-Klasse-Methode aufrufen müssen und einige Methoden nicht brauchen,Does Methode [Last] anrufen müssen [super Last]
Ich bin auf der Suche über etw über Methode swizzling.It des initialisiert in die Lade-Methode, und im Tutorial gibt es keine [super load]
.
Ich frage mich, ob es falsch ist oder es gibt einfach keine Notwendigkeit, [super load]
zu rufen.
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
// When swizzling a class method, use the following:
// Class class = object_getClass((id)self);
SEL originalSelector = @selector(pushViewController:animated:);
SEL swizzledSelector = @selector(flbs_pushViewController:animated:);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
BOOL didAddMethod =
class_addMethod(class,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
});
}
#pragma mark - Method Swizzling
- (void)flbs_pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
dispatch_async(dispatch_get_main_queue(), ^{
[self flbs_pushViewController:viewController animated:animated];
});
NSLog(@"flbs_pushViewController");
}
Übrigens wird diese Methode verwendet, um die Navigation Korruption zu beheben.
Ich zufällig passiert das Problem manchmal, und ich debuggered es, ich denke, es geht um den Thread.So mache ich diese swizzling, um etw in der Systemmethode hinzuzufügen.
Wenn Sie etwas über die Navigation Korruption Problem oder diese Methode Swizzling sagen können, ich auch sehr zu schätzen.
Beste Vorgehensweise zum Aufruf von [super load], damit alle Komponenten die Kommunikation des stattfindenden Ereignisses erhalten. – nikhil84