Sobes.tech
Назад к вопросам
Junior — Middle
69

Что такое Swizzling и в чем его преимущества и недостатки?

Компании, где спрашивали
AvitoAvito

Ответ от нейросети

sobes.tech AI

Swizzling — это техника в Objective-C и Swift, позволяющая динамически менять реализацию методов во время выполнения программы. Обычно используется для подмены стандартного поведения системных классов.

Преимущества:

  • Позволяет добавлять или изменять функциональность без изменения исходного кода.
  • Удобно для логирования, трекинга, исправления багов или добавления кросс-срезных функций.

Недостатки:

  • Может привести к непредсказуемому поведению, если неаккуратно использовать.
  • Сложно отлаживать и поддерживать.
  • Нарушает инкапсуляцию и может конфликтовать с будущими обновлениями SDK.

Пример Swizzling в 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]; // вызов оригинального метода
    NSLog(@"%@ will appear", NSStringFromClass([self class]));
}

@end

Здесь мы меняем реализацию viewWillAppear: на свою, добавляя логирование.