iOS: Comment vérifier si les UIViewControllers déchargent? (Rapide)
Je suis en utilisant un UISplitViewController
chaque fois que je clique sur une ligne dans le Maître de CR je vois que viewDidLoad()
est exécuté dans le Détail VC.
Est-ce à dire que je suis de la création d'une nouvelle instance de Détail VC chaque ligne cliquez sur?
Si oui, comment puis-je vérifier que le niveau de Détail VC sont déchargement correctement et que je ne suis pas seulement la création de plus en plus de nouveaux Détails VCs?
Je suis un peu perdu ici, en Swift. Auparavant, j'ai pu NSLog dans le dealloc() et voir la UIViewController
correctement déchargement.
Je ici Swift a une deinit fonction, mais ce n'est jamais appelée:
deinit {
println("\(__FILE__.lastPathComponent)) : \(__FUNCTION__)")
NSNotificationCenter.defaultCenter().removeObserver(self)
}
1) Où dois-je enlever mon observateurs?
2) Quand je regarde dans le Navigateur de Débogage dans Xcode l'utilisation de la Mémoire ne cesse de monter et jamais vers le bas.
Mise à jour: Détail de la VC est appelé comme suit:
if segue.identifier == "addEvent" {
if let controller = (segue.destinationViewController as UINavigationController).topViewController as? ManageViewController {
controller.manageEvent = nil
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
Je ne fais rien de différent de ce que beaucoup d'exemples que j'ai vu, mais je suis inquiet au sujet de deinit
pas être appelé
Mise à jour: Travail maintenant - Problème était avec le délégué de l'arrêt de deinit
être appelé (voir ci-dessous la réponse)
Mon origine Non-code de Travail a été:
protocol ManageViewDelegate {
func pressedButton(sender: AnyObject)
}
class ManageView: UIView {
var delegate: ManageViewDelegate? = nil
...
}
Nouveau code de Travail:
protocol ManageViewDelegate: class {
func pressedButton(sender: AnyObject)
}
class ManageView: UIView {
weak var delegate: ManageViewDelegate? = nil
...
}
source d'informationauteur Richard
Vous devez vous connecter pour publier un commentaire.
Vous avez une vue avec un
delegate
bien que les références de l'-vue-contrôleur. Il en résultera une forte cycle de référence (précédemment connu en tant que retenir de cycle), parce que la vue du contrôleur est de maintenir une référence forte à son haut niveau de point de vue qui est, à son tour, le maintien d'une forte référence à la vue-contrôleur.Dans le la Résolution Forte des Cycles de Référence Entre les Instances de Classe section de Le Langage De Programmation Swift: Automatique De Comptage De RéférenceApple explique comment remédier à ce problème:
Ainsi, vous pouvez résoudre votre forte de cycle de référence par la définition de la
delegate
êtreweak
:Pour que cela fonctionne, vous devez spécifier le protocole à la classe du protocole:
Qui permettra de résoudre la forte cycle de référence et élimine le besoin manuellement
nil
ladelegate
afin de résoudre le fort de cycle de référence.Aussi, si vous utilisez des blocs, vous devez ajouter [faible auto], autrement,la vue ne serait pas détruit
La deinit fonction devrait fonctionner