Question

Puisqu'il n'y a pas de contrepartie de NSValue dans Core Foundation, comment sommes-nous supposés stocker les structures C dans un CFMutableDictionary?

Était-ce utile?

La solution

Tout d'abord, vous pouvez mettre une NSvalue dans un CFMutableDictionary tel quel, la réponse est donc "use NSValue". Mais je suppose que le reste de votre question est "sans utiliser d'objet Cocoa". Dans ce cas, créez simplement un CFMutableDictionary non conservateur, et vous pourrez y placer le pointeur de votre choix. Voir "Définition des rappels de collecte personnalisés" pour un exemple de code. Je les utilise beaucoup.

Rappelez-vous qu'il doit toujours s'agir de pointeurs. Vous devrez donc allouer vos structures sur le tas, pas sur la pile. Et cela signifie que la gestion de la mémoire est maintenant votre problème. Bien sûr, vous pouvez créer un ensemble personnalisé de callbacks à votre guise. Ainsi, si vous utilisez boost ou quelque chose d’autre avec son propre système de comptage des références, vous pouvez toujours l’implémenter avec CFMutableDictionary.

Et bien sûr, vous pouvez remplacer la structure par un petit objet de données. C'est généralement beaucoup plus facile. Mais différents problèmes nécessitent des solutions différentes.

Autres conseils

CFMutableDictionary

CFDictionaryAddValue Un objet CFType ou une valeur de pointeur à ajouter au dictionnaire.

vous venez de passer un pointeur sur votre structure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top