2012-12-28 1 views
1

J'ai une fonction C heightParameter qui est un outil simple que j'utilise dans un de mes UIViewController s. Je déclare ceci seulement dans mon implémentation principale de chaque sous-classe UIViewController (dans le .m) au-dessus de mes autres fonctions, de sorte que je n'ai même pas eu à le déclarer dans l'en-tête.XCode: symbole en double

Pour une raison quelconque, j'obtiens des symboles en double dans toutes les autres sous-classes dans lesquelles je les utilise, malgré leur implémentation privée. Il se trouve dans le bloc principal @implementation @end pour chaque sous-classe et ne devrait être vu par rien d'autre, alors comment est-il vu globalement?

Répondre

2

Les noms de fonctions C ont une portée globale. Marquez-le static ou en faites une méthode si vous voulez qu'elle soit restreinte.

+0

La statique ne l'aurait-elle pas forcée à être globale? Je pensais que statique ferait une mise en œuvre dans toute l'application? Ou fait-il cela, mais permet plusieurs implémentations? – RileyE

+0

C'est global * sans * 'static'. L'ajout de 'static' restreindra l'accès à ce symbole à une seule unité de compilation. Cela signifie que vous pourriez avoir une implémentation séparée pour chaque fichier '.m'. Pourquoi n'en faites-vous pas une méthode privée? Cela semblerait être l'approche la plus logique. Une bonne référence pour comprendre 'static': http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program –

+0

Oh. Je suppose que j'avais un malentendu sur ce qu'était l'électricité statique, alors. Merci! Mais en le rendant privé, voulez-vous dire en faire une fonction Objective-C? Ou voulez-vous dire en faire une fonction Objective-C ET l'ajouter à une catégorie privée? – RileyE

Questions connexes