2017-08-09 3 views
0

Supposons que je crée un UILabel par programme, puis que je l'ajoute en tant que sous-vue à la vue principale de la sous-classe de mon propre UIViewController. Je veux également stocker une référence au niveau de la classe de mon contrôleur de vue afin que je puisse l'utiliser plus tard. Devrais-je en faire une référence faible? Et plus important encore pourquoi?Références faibles pour les sous-vues créées dans un UIViewController

Je vois des gens faire ça tout le temps, et je ne le comprends pas. Je pensais que le point d'une référence faible était d'éviter un cycle de retenue, mais il n'y a pas de cycle de retenue ici. Je vois certainement ce code partout où les gens utilisent des storyboards/nibs (que je n'ai jamais essayé d'utiliser donc je comprends à un niveau très basique) mais même là je ne comprends pas pourquoi les références faibles seraient appropriées . Il n'y a pas de cycle de conservation là non plus, non?

+0

Je ne pensais pas qu'il s'agissait d'un doublon de ce que vous avez mentionné puisque ma principale préoccupation était la création de sous-vues et non de points de vente. –

Répondre

1

Non, il n'y a aucune raison pour que ce soit une référence faible, vous l'avez correctement identifié comme une relation à sens unique. Le générateur de code d'Interface Builder a généré par le passé des références faibles par défaut (ce qui explique peut-être pourquoi vous l'avez beaucoup vu.) Les conseils d'Apple à ce sujet ont changé au fil du temps: Should IBOutlets be strong or weak under ARC?

+0

La question concerne une sous-vue créée par programme et non une IBOutlet. –

+0

@JoshuaKaden: Il a mentionné les storyboards/nibs dans la question, j'ai donc ajouté ce détail pour plus de clarté. – jlew

+0

@JoshuaKaden - Plus, la question est la même en grande partie. La hiérarchie des vues conservera une référence solide, de sorte que vous n'avez pas besoin d'y faire référence. Mais les références «faibles» ne sont pas gratuites (il est vrai que les frais généraux sont négligeables). En outre, lors de la création par programmation d'une sous-vue que vous allez enregistrer dans une référence faible, vous devez écrire du code qui conserve la sous-vue dans une variable locale pendant que vous ajoutez la vue à votre hiérarchie et enregistrez la référence. Les bonnes références de bas de page donnent un code plus simple, ce qui est bien tant qu'il n'y a pas de cycles de référence. – Rob