Sobes.tech
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.