5 votes

Utilisation de objc_disposeClassPair()

Il existe une fonction non documentée dans l'API d'exécution, qui semble (sur la base de quelques programmes jouets) faire ce que son nom suggère :

OBJC_EXPORT void objc_disposeClassPair(Class cls) 
     AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER;

Cependant, les informations détaillées sont plutôt rares. Il s'agit donc davantage d'un ensemble de questions connexes que d'une seule question :

  • Existe-t-il de bons articles ou des billets de blog sur ce sujet, ou quelqu'un a-t-il une expérience de son utilisation (une recherche rapide sur Google suggère que les développeurs de PyObjC ont au moins envisagé de l'utiliser à un moment donné) ?
  • Les classes éliminées sont-elles complètement désallouées (une application qui crée et supprime fréquemment des classes ferait-elle fuir la mémoire ?)
  • Y a-t-il des inconvénients à garder à l'esprit, en dehors des habituels problèmes d'API non documentées ?
  • Où est-il (/pourrait-il être) utilisé par Apple ? Déchargement de NSBundle ? KVO ?

2voto

ughoavgfhw Points 28400

Les classes éliminées sont-elles complètement désaffectées (une application qui crée et supprime fréquemment des classes ferait-elle fuir la mémoire ?)

Oui, ils seront complètement désaffectés. Si vous regardez le cycle fonction dans http://www.opensource.apple.com/source/objc4/objc4-437/test/classpair.m vous constaterez qu'il alloue et désalloue plusieurs classes. Le site main L'implémentation ci-dessous exécute cette fonction 100 fois, et vérifie les fuites, ce qui indique qu'ils ne publieraient pas une implémentation qui présente des fuites significatives. Si vous voulez en savoir plus, vous pouvez consulter le code de la page http://www.opensource.apple.com/source/objc4/objc4-437/runtime/ . Vous pouvez probablement trouver le code réel d'Apple pour ces deux fonctions quelque part, ainsi que l'endroit où il est utilisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X