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 για όλους τους ελεγκτές χωρίς να αλλάξει ο πηγαίος κώδικας τους.