[Tuto/Cours] Variables d'instance, propriétés et accesseurs

2»

Réponses

  • ClicCoolClicCool Membre
    20:51 modifié #32
    dans 1258062690:

    Oui et non. Je viens de tester, cela ne peut pas être fait dans les catégories.


    Ah! Merci
    Honnêtement j'avais un léger doute et n'ai pas testé.
    Mais la doc ne fait nullement mention de cette limitation ...
  • ClicCoolClicCool Membre
    20:51 modifié #33
    Remarques c'est logique en fait dans la mesure où une catégorie ne peut pas déclarer d'iVar !

    P.S. T'as un message d'erreur à  la compilation ? lequel ?
  • ThibautThibaut Membre
    20:51 modifié #34
    Le @property est dans une catégorie. On peut donc tenter le @synthesize a deux endroits : dans le @implementation original, dans ce cas là  il dit qu'il ne trouve pas de @property du même nom, ou dans une catégorie, et dans ce cas là , il dit que le @synthesize n'est pas permis dans les catégories : "@synthesize not allowed in a category's implementation".

  • ClicCoolClicCool Membre
    novembre 2009 modifié #35
    dans 1258063950:

    Le @property est dans une catégorie. On peut donc tenter le @synthesize a deux endroits : dans le @implementation original, dans ce cas là  il dit qu'il ne trouve pas de @property du même nom, ou dans une catégorie, et dans ce cas là , il dit que le @synthesize n'est pas permis dans les catégories : "@synthesize not allowed in a category's implementation".




    Ah, merci.
    J'aurais pas utilisé une "simple" catégorie mais plutôt dans une extension placée directement dans le fichier d'implémentation principal.

    Comme dans la suggestion de Dilaroga:
    dans 1258042555:
    ../...
    L'implémentation des propriétés en objective-C 2 permet de réaliser assez finement ses choix de conception. On peut par exemple definir une propriété readonly dans l'interface publique d'une classe et la redefinir en readwrite dans une extension de cette même classe (interface privée) :
    interface :
    <br /><br />@interface MaClasse : NSObject<br />{<br />    BOOL maPropriete ;<br />}<br /><br />@property(readonly) BOOL maPropriete ;<br /><br />@end<br />
    

    Implementation :
    <br /><br />@interface MaClasse()<br /><br />@property(readwrite) BOOL maPropriete ;<br /><br />@end<br /><br />@implementation MaClasse<br /><br />@synthesize maPropriete ;<br /><br />@end<br /><br />
    


    Ainsi tu auras un getter public et un setter privé.

    On peut encore réécrire le corps des setter/getter en utilisant le mot clé @dynamic en lieu et place de @synthesize.


    Mais sans déclarer l'iVar [tt]maPropriete[/tt] ni la propriété dans le header.

    Mais le résultat decrait être le même si on considère qu'une extension est une catégorie "anonyme".
    Le @synthesize ne passerait puisqu'il impose au compilo de générer également l'iVar en plus des accesseurs....
  • ClicCoolClicCool Membre
    20:51 modifié #36
    Bon ben, reste plus que les Associative References alors pour gérer une pseudo-iVar cachée  ;D


    Mais bon, c'est pas mon but non plus, j'suis pas parano du tout je voulais juste attirer l'attention sur la portée des properties ;)
  • ThibautThibaut Membre
    20:51 modifié #37
    dans 1258064734:
    Ah, merci.
    J'aurais pas utilisé une "simple" catégorie mais plutôt dans une extension placée directement dans le fichier d'implémentation principal.

    Comme dans la suggestion de Dilaroga:

    (...)

    Mais sans déclarer l'iVar [tt]maPropriete[/tt] ni la propriété dans le header.

    Mais le résultat decrait être le même si on considère qu'une extension est une catégorie "anonyme".
    Le @synthesize ne passerait puisqu'il impose au compilo de générer également l'iVar en plus des accesseurs....

    En fait, je pensais que les extensions étaient comme des catégories anonymes, mais non.

    Je viens de tester le code suivant, et ça fonctionne sans problème :

    <br />// Fichier .h<br />@interface MyClass : NSObject {<br />}<br />@end<br /><br /><br />// Fichier .m<br />@interface MyClass ()<br />@property(readwrite,retain) NSString *var;<br />@end<br /><br />@implementation MyClass<br />@synthesize var;<br />@end<br />
    
  • ClicCoolClicCool Membre
    novembre 2009 modifié #38
    ahaaaaa !
    Voilà  un test qui est intéressant ! ça marche :)

    On peut donc créer des variables d'instance dans une extension, en passant par les properties et @synthetize !!!

    Merci Thibaut  :)
  • ClicCoolClicCool Membre
    novembre 2009 modifié #39
    Bon, ceci dit que fait donc ce sujet dans le sous-forum iPhone SDK ?

    ça concerne aussi le Développement Mac SDK !

    Mais que fait donc l'admin ?

    Et que fait donc Ali ? sa mise au point du début devrait déjà  être dans les articles de fond  ;D

    (Pile poil au pbt)
  • AliGatorAliGator Membre, Modérateur
    20:51 modifié #40
    [PJ]Nan t'as 28 secondes de retard ;D[/PJ]
  • ClicCoolClicCool Membre
    20:51 modifié #41
    29  :P
  • AliGatorAliGator Membre, Modérateur
    20:51 modifié #42
    Ah non, avec toi le PBT officiel c'était 000001 il me semble, non ?
Connectez-vous ou Inscrivez-vous pour répondre.