Junior — Middle
O que é Swizzling e quais são as suas vantagens e desvantagens?
sobes.tech IA
Resposta da IA
Swizzling é uma técnica em Objective-C e Swift que permite alterar dinamicamente a implementação de métodos durante a execução do programa. Geralmente é usada para substituir o comportamento padrão de classes do sistema.
Vantagens:
- Permite adicionar ou modificar funcionalidades sem alterar o código fonte.
- Útil para logging, tracking, correção de bugs ou adição de funções transversais.
Desvantagens:
- Pode levar a comportamentos imprevisíveis se usado de forma descuidada.
- Difícil de depurar e manter.
- Viola a encapsulação e pode conflitar com futuras atualizações do SDK.
Exemplo de Swizzling em Objective-C:
#import <objc/runtime.h>
@implementation UIViewController (Tracking)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method original = class_getInstanceMethod(self, @selector(viewWillAppear:));
Method swizzled = class_getInstanceMethod(self, @selector(xxx_viewWillAppear:));
method_exchangeImplementations(original, swizzled);
});
}
- (void)xxx_viewWillAppear:(BOOL)animated {
[self xxx_viewWillAppear:animated]; // chamada do método original
NSLog(@"%@ irá aparecer", NSStringFromClass([self class]));
}
@end
Aqui, trocamos a implementação de viewWillAppear: pela nossa, adicionando logging.