So che molti metodi devono chiamare il suo metodo di classe super e alcuni metodi non hanno bisogno,metodo non [carico] bisogno di chiamare [carico eccellente]
sto cercando su sth sul metodo swizzling.It di inizializzato in il metodo di caricamento, e nel tutorial non c'è [super load]
.
Mi chiedo se è sbagliato o non c'è solo bisogno di chiamare [super load]
.
+ (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");
}
Tra l'altro, questo metodo viene utilizzato per risolvere il danneggiamento di navigazione.
Mi è capitato di riapparire il problema a volte, e l'ho debuggerato, penso che riguardi la discussione. Quindi faccio questo swizzling per aggiungere sth nel metodo di sistema.
Se si riesce a capire il problema della corruzione della navigazione o di questo metodo di swizzling, lo apprezzo molto.
Best practice per chiamare [super carico] in modo che tutti i componenti ricevano la comunicazione dell'evento che si sta verificando. – nikhil84