J'ai regardé ce sujet sur Google, mais je n'ai pas encore de réponse compréhensible, le problème est que je sache que lorsque deux classes sont couplées ensemble en instanciant d'un objet dans la première classe de la deuxième classe et déclarant un autre objet dans le Deuxième classe de la première classe Ceci provoquera un cycle de conservation qui devrait être rompu en utilisant le mot-clé faible ou évident, mais je ne peux pas appliquer cette façon de penser sur les Iboutlets déclaré comme faibles Par exemple
class SignUpViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBOutlet weak var signUpBttn: UIButton! }
3 Réponses :
Tous les éléments UI dans un contrôleur d'affichage font partie de la vue ViewController. Donc, la vue est une classe UIView et des points de vente sont en référence dans la vue Contentrale des éléments de la classe UIView, de sorte que la vue est supprimée, la hiérarchie de la vue Tous les éléments croisés doivent être faibles pour éviter toute référence croisée. Le problème de l'EID à ce sujet est la référence d'Apple MVC, où une entreprise de vue est un contrôleur, mais a un groupe associé à la partie de vue. Toutes les points de vente doivent être placés dans la classe UIView de votre vie de ViewController. P>
TLDR - à mon avis Ce n'est pas une bonne décision.
A Cependant, dans la plupart des situations, cela n'a pas vraiment d'importance car les vues sont également fermement référencées. par leur parent dans la hiérarchie de vue. p> Quand est-ce important? Il est important dans des situations lorsque vous mettez à jour de manière dynamique la hiérarchie d'affichage en supprimant les vues / contraintes, etc. Une fois que vous avez retiré une vue / contrainte de la hiérarchie et que vous ne vous y avez pas fortement, il sera retiré de la mémoire. p> Notez également que la combinaison de Ceci peut conduire à des erreurs, par exemple: p> personnellement, je fais toujours des points de vente Notez que Historiquement, il pourrait y avoir une connexion avec forte code> référence dénote la propriété. Le contrôleur View ou View est le propriétaire des vues, par conséquent, le choix logique devrait être
fort code>. P>
faible code> et
! code> est un peu dangereuse car
! code> dénote une référence que vous attendez de ne jamais être
nil code>. p>
fort code>. Pour tout
faibles code> références, j'utilise toujours
? Code> et pas
! Code>. P>
faible code> Dans ce cas n'a rien à voir avec la protection contre les cycles de référence. C'était juste une décision personnelle des développeurs Xcode. P>
uiviewcontroller.viewdidunload code>. Cependant, cette méthode n'est jamais appelée depuis iOS 6. P> P>
Apple recommande qu'un Si vous jetez un coup d'œil à cette vidéo d'Apple il déclare: p>
En général, vous devriez rendre votre sortie forte, surtout si vous connectez une sortie à une sous-vision ou à une contrainte qui ne sera pas toujours retenue par la hiérarchie de vue. La seule fois où vous avez vraiment besoin de faire un point faible, c'est si vous avez une vue personnalisée qui fait référence à quelque chose de sauvegarde de la hiérarchie de vue et en général qui n'est pas recommandée. P>
blockQuote> @iboutlet code> soit déclaré comme
Ceci est discuté ici
@ Reinhardmänner Je suis tombé sur cet article mais tout est toujours vague pour moi: s
Les points de vente ne sont pas déclarés faibles "par défaut" afin que toute la prémisse de la question est fausse.
Cependant, une ligne de pensée pourrait exécuter: le contrôleur d'affichage a une référence forte à sa vue. La vue a une référence forte à sa sous-vision. Avons-nous vraiment besoin d'une autre référence forte du contrôleur d'affichage à la sous-vision? Qui possède i> la sous-sousview quand même? Son superview.