Назад к вопросам
Avito
Junior — Middle
69
Что такое Swizzling и в чем его преимущества и недостатки?
Компании, где спрашивали
Ответ от нейросети
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: на свою, добавляя логирование.