voici un problème avec le problème de gestion de la mémoire.problème à propos de subview conserver superview dans objectif-C
Dire que j'ai vue A, il a un pointeur qui pointe vers son sous-vue B. Je l'utilise @property(nonatomic, retain)
se réfèrent à la vue B.
maintenant dans B sous-vue, je besoin d'un pointeur pour pointer vers son superview R. Donc, j'utilise un autre @property(nonatomic, retain)
se référer à sa superview A.
Voici ma préoccupation, j'ai lu un article Hold Me, Use Me, Free Me sur conserver et de libérer des choses dans l'objectif c. Il a mentionné "conserver les cycles". Donc, il est dit qu'une sous-vue n'a pas besoin de conserver sa vue d'ensemble, en fait elle serait redondante si elle le fait. Est-ce que cela signifie dans mon exemple, la sous-vue B seulement besoin d'utiliser @property(nonatomic)
se référer à sa superview A? THX!
BTW, si je n'ai pas écrit retient dans la @ propriété pour la vue A, ai-je besoin de [viewA release]
dans la méthode dealloc?
Alors, que se passe-t-il si View A est une classe UIViewController (sous-classe de UIResponder-> NSObject)? J'ai essayé d'ajouter une sous-vue, qui est une UIImageView (sous-classe de UIView). Donc quand j'utilise self.superview dans la classe subview, il ne m'a pas donné la classe UIViewController (que je veux), mais me donne le UIViewController.view. Alors, comment pourrais-je faire pour obtenir la classe UIViewController. (En fait c'est la classe UIViewController.view addSubview de la classe UIImageView, pas la classe UIViewController elle-même Donc, dans la classe subView, self.superView ne pointe pas vers la classe UIViewController) – sbs
Il est payant d'être précis: un contrôleur de vue n'est pas lui-même une vue, mais régit plutôt une vue. Une vue est ignorante de son contrôleur par conception. Sa communication avec son contrôleur est médiatisée par la chaîne du répondeur: l'interaction de l'utilisateur fait monter la chaîne du répondeur jusqu'à ce qu'elle rencontre un gestionnaire. Vous pouvez parcourir cette chaîne en utilisant '- [UIResponder nextResponder]'. Étant donné qu'un contrôleur de vue possède sa vue contrôlée, vous devez toujours éviter de provoquer un cycle de conservation - vous ne souhaitez toujours pas que la sous-vue conserve le contrôleur de sa vue d'ensemble. –