Sobes.tech
Junior — Middle

Πώς μπορεί κανείς να παρακολουθεί τις κλήσεις της μεθόδου viewDidLoad σε όλα τα στιγμιότυπα ελεγκτών στην εφαρμογή;

sobes.tech AI

Απάντηση από AI

Για την παρακολούθηση των κλήσεων της μεθόδου viewDidLoad σε όλα τα instances ελεγκτών σε iOS, μπορείτε να χρησιμοποιήσετε τη μέθοδο swizzling — μια δυναμική αντικατάσταση της υλοποίησης της μεθόδου κατά το χρόνο εκτέλεσης.

Παράδειγμα σε 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() {
        // Κλήση της αρχικής (τώρα swizzled_viewDidLoad)
        swizzled_viewDidLoad()

        // Καταγραφή ή άλλη λογική
        print("viewDidLoad καλείται για \(type(of: self))")
    }
}

// Κάλεσε το swizzling μία φορά, π.χ. στο AppDelegate
UIViewController.swizzleViewDidLoad

Αυτή η προσέγγιση επιτρέπει την παρεμβολή στις κλήσεις viewDidLoad για όλους τους ελεγκτές χωρίς να αλλάξει ο πηγαίος κώδικας τους.