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