Sobes.tech
Junior — Middle

Como pode rastrear as chamadas do método viewDidLoad em todas as instâncias de controladores na aplicação?

sobes.tech IA

Resposta da IA

Para rastrear as chamadas do método viewDidLoad em todas as instâncias de controladores no iOS, pode usar o método de swizzling, que é uma substituição dinâmica da implementação do método em tempo de execução.

Exemplo em 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() {
        // Chamada do método original (agora swizzled_viewDidLoad)
        swizzled_viewDidLoad()

        // Registo ou lógica adicional
        print("viewDidLoad chamado para \(type(of: self))")
    }
}

// Chamar o swizzling uma vez, por exemplo, no AppDelegate
UIViewController.swizzleViewDidLoad

Esta abordagem permite interceptar chamadas a viewDidLoad para todos os controladores sem alterar o seu código fonte.