self.view subviews déclaré avec Copy (ou un tableau en général)

Bonjour à  vous Cocoanautes,


 


J'ai une question concernant une property déclaré avec le mot clef "copy".


Avant de vous poser ma question, je vous fais part de ma perception de la chose (comme ça vous pourrez jugez si déjà  j'ai le bon pré-requis).


 


Il me semble que Copy appliqué à  un objet, fait que lorsqu'on assigne à  ce dernier un autre objet (disons "objet2"), une copie est faite de l'objet 2 vers l'objet 1.


Objet1 et objet2 possèdent donc 2 objets différents (bien qu'ayant la meme tete),  de manière que lorsqu'on l'on modifie un des 2, cela n'affecte pas l'autre objet (si bien sur les objets sont mutables).


 


Or, je ne comprends pas la logique de ce code, par exemple :



for (UIButton* button in [self.view subviews])
{

if ([button isKindOfClass:[UIButton class]])
{
//faire quelquechose avec le bouton
}

}

En effet, celui ci va modifier tous les boutons de mon self.view bien que le tableau "subviews" soit déclaré en "Copie".


Je m'attendais à  ce qu'ils modifient uniquement des Copies de mes vues, tout en gardant mes vues initiales.


 


Ou est mon erreur dans la perception des choses?


 


Merci à  vous


Réponses

  • AliGatorAliGator Membre, Modérateur
    Si tu affectes un nouveau NSArray à  la propriété sels.view.subviews alors ce NSArray sera copié.

    Là  tu ne lui affectes pas une nouvelle valeur, tu accèdes juste à  la propriété de type NSArray " en lecture " pour parcourir son contenu.

    à‰ventuellement dans ta boucle for tu modifies les UIButton mais eux n'ont pas été copié, c'est le NSArray qui est en propriété copy de toute façon pas son contenu (shallow copy)
  • Merci de ta réponse Ali, j'y vois plus clair


Connectez-vous ou Inscrivez-vous pour répondre.