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 ?
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)
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.
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.
Réponses
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 ...
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)
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.
Là le compilo n'est pas content:
Par contre si j'utilise un entier en "dur" Là il rale pas
(j'aurais préféré l'inverse
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.