Junior — Middle
Hogyan lehet nyomon követni a viewDidLoad metódus hívásait az alkalmazás összes példányában?
sobes.tech MI
Válasz az MI-től
Az iOS összes példányában a viewDidLoad metódus hívásainak nyomon követéséhez használhatja a swizzling módszert — egy dinamikus módszerhelyettesítést futás közben.
Swift példában:
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() {
// Az eredeti viewDidLoad hívása (most már swizzled_viewDidLoad)
swizzled_viewDidLoad()
// Naplózás vagy más logika
print("viewDidLoad hívva: \(type(of: self))")
}
}
// Egyszer hívja meg, például az AppDelegate-ben
UIViewController.swizzleViewDidLoad
Ez a megközelítés lehetővé teszi, hogy minden kontroller viewDidLoad hívásait elfogja anélkül, hogy módosítaná a forráskódjukat.