La réponse à votre question est d'aller de l'avant et de l'importation de la définition de type fichier d'en-tête ou l'utilisation d'un type générique comme NSInteger plutôt du type enum.
Cependant, il n'y a plus de raison de ne pas l'importation d'un fichier d'en-tête que de simplement compiler vitesse.
Pas de l'importation d'un fichier d'en-tête permet également de réduire votre involontaire d'accès à des classes.
Par exemple, disons que vous avez un TrackFileChanges classe qui suit le système de fichiers pour les modifications apportées à un fichier spécifique, et vous avez un CachedFile classe qui stocke les données mises en cache à partir d'un fichier. Ce dernier peut utiliser un privé ivar de type TrackFileChanges*, mais pour des utilisations de CachedFile, ce n'est qu'un détail d'implémentation (dans l'idéal, le ivar serait auto-généré avec une propriété privée, à l'aide de la nouvelle de l'exécution, mais ce n'est pas possible si vous utilisez l'ancien temps d'exécution).
Afin que les clients qui #import "CachedFile.h" n'ont probablement pas besoin ou que vous voulez accéder à TrackFileChanges.h. Et s'ils le font, ils doivent indiquer clairement par #l'importation d'eux-mêmes. En utilisant @classe TrackFileChanges instea de #import "TrackFileChanges.h" dans CachedFile.h-vous améliorer l'encapsulation.
Mais tout cela étant dit, il n'y a rien dans al'erreur à l'importation d'un fichier d'en-tête à partir d'un deuxième fichier d'en-tête si le second en-tête veut exposer le premier de tous les clients. Par exemple, les fichiers d'en-tête déclarant des classes doivent être importés directement dans le sous-classement fichiers d'en-tête et les fichiers d'en-tête déclarant les protocoles pourraient bien être importés directement (bien que youy pouvez utiliser @protocole ABC; pour éviter cela).