Junior — Middle
Jak można śledzić wywołania metody viewDidLoad we wszystkich instancjach kontrolerów w aplikacji?
sobes.tech AI
Odpowiedź od AI
Aby śledzić wywołania metody viewDidLoad we wszystkich instancjach kontrolerów w iOS, można użyć metody swizzling — dynamicznej zamiany implementacji metody w czasie działania.
Przykład w Swift:
import UIKit
extension UIViewController {
static let swizzleViewDidLoad: Void = {
let originalSelector = #selector(viewDidLoad)
let swizzledSelector = #selector(swizzled_viewDidLoad)
guard let originalMethod = class_getInstanceMethod(UIViewController.self, originalSelector),
let swizzledMethod = class_getInstanceMethod(UIViewController.self, swizzledSelector) else { return }
method_exchangeImplementations(originalMethod, swizzledMethod)
}()
@objc func swizzled_viewDidLoad() {
// Wywołanie oryginalnej metody (teraz swizzled_viewDidLoad)
swizzled_viewDidLoad()
// Logowanie lub inna logika
print("viewDidLoad wywołano dla \(type(of: self))")
}
}
// Wywołać swizzling raz, na przykład w AppDelegate
UIViewController.swizzleViewDidLoad
Ten sposób pozwala przechwycić wywołania viewDidLoad dla wszystkich kontrolerów bez zmiany ich kodu źródłowego.