les Associative References: une inovation qui mériterait qu'on s'y intéresse

2»

Réponses

  • ClicCoolClicCool Membre
    19:39 modifié #32
    dans 1256849079:

    Bah justement d'après les exemples d'Apple que vous avez recopié ici, la variable statique n'est même pas initialisée, si ?
    En tout cas j douterai vraiment fortement que ce soit le contenu qui soit utilisé, ça n'aurait pas de sens. C'est vraiment juste un "==" entre le void* qu'on passe dans "objc_getAssociatedObject" et la liste de toutes les autres clés void* dans lesquelles il cherche.


    C'est exactement ce que pensais à  ma première lecture.

    Mais la doc est tellement succinte que j'espérait qu'il en soit autrement ...

    dans 1256849079:
    Pour moi ils auraient pu vraiment tout aussi bien utiliser un [tt]long long int[/tt] plutôt qu'un void* puisqu'en interne ils font qu'une comparaison sur l'adresse, donc juste un entier en qques sortes. Avoir mis un type "void*" c'est juste pour nous permettre de pouvoir passer n'importe quoi à  la fonction (et nous inciter à  passer un pointeur vers un objet ou autre) sans avoir à  "caster". Enfin j'imagine mais tout semble indiquer que ça marche comme ça ;)

    En effet.
    Je viens d'essayer en utilisant des int, le compilateur rale mais ça passe et ça marche bien.
    Pourquoi n'ont-il pas permis ça de base ?
  • Philippe49Philippe49 Membre
    19:39 modifié #33
    dans 1256854908:

    En effet.
    Je viens d'essayer en utilisant des int, le compilateur rale mais ça passe et ça marche bien.
    Pourquoi n'ont-il pas permis ça de base ?

    Un char c'est ce qui prend le moins de place, et historiquement void * c'était au début un char *.
    Moi je n'ai aucun warning en typant autrement la clé (même avec -Wall -Wextra)
  • ClicCoolClicCool Membre
    octobre 2009 modifié #34
    dans 1256856145:

    Un char c'est ce qui prend le moins de place, et historiquement void * c'était au début un char *.
    Moi je n'ai aucun warning en typant autrement la clé (même avec -Wall -Wextra)


    Je me suis mal exprimmé.
    C'est pas avec un statique genre [tt]static int countryKey[/tt] que j'ai essayé mais avec un [tt]int clef = 1111[/tt] intialisé avec nimporte quelle valeur arbitraire et transmise en lieu et place du pointeur.
    objc_setAssociatedObject(chaine, key1, chaine1, OBJC_ASSOCIATION_ASSIGN);<br />
    
    Là  le compilo n'est pas content:
    /Users/ClicCool/Developpements/ClicCab/ClicCab_AppDelegate.m:90:36 /Users/ClicCool/Developpements/ClicCab/ClicCab_AppDelegate.m:90:36:{90:36-90:41}: warning: incompatible integer to pointer conversion passing 'long long', expected 'void *'


    Par contre si j'utilise un entier en "dur"
    objc_setAssociatedObject(chaine, 11112, chaine1, OBJC_ASSOCIATION_ASSIGN);<br />
    
    Là  il rale pas
    (j'aurais préféré l'inverse ;)

  • AliGatorAliGator Membre, Modérateur
    19:39 modifié #35
    Bah non moi ça me va bien comme ça.
    Du coup comme je le disais plus haut on peut utiliser un entier comme key directement, au moins ça permet de passer entre les diverses librairies & co en plus.
    En fait dans la doc l'exemple de la variable static est plus déroutant qu'autre chose finalement. Même si utiliser une variable static permet d'avoir un "nom" pour la clé, mais bon, pour comprendre le fonctionnement c'est pas idéal.
  • Philippe49Philippe49 Membre
    19:39 modifié #36
    En castant ton int par (void*) cela devrait lui claquer le beignet à  ce compilateur, non ?
Connectez-vous ou Inscrivez-vous pour répondre.