2010-12-15 54 views
0

Je définirais certaines fonctions auxiliaires, et je préfère les écrire en C au lieu de l'objectif-C.Utiliser les définitions C dans Objective-C

Quelle est la «meilleure pratique» pour ajouter un en-tête et un fichier C d'implémentation dans un projet Objective C?

Si j'ai besoin d'utiliser la définition Objective-c dans mes fonctions, que dois-je inclure dans mon fichier C d'en-tête (UIKit?)? Exemple: je voudrais créer un raccourci vers NSLog pour NSString, puis-je créer quelque chose de similaire à ce code dans mon fichier C? :

void MYLog (NSString *string){ 
    NSLog(@"%@",string); 
} 
+0

Pourquoi créer un raccourci pour 'NSLog()' de prendre un seul 'NSString' quand il prennent déjà une chaîne, et ** ** optionaly plusieurs paramètres? – PeyloW

+0

Chaque fois que j'ai pensé * Je vais juste créer une API C ici *, je l'ai regretté ... Une version Objective-C n'est pas beaucoup plus de travail, engage rarement une quantité significative de frais généraux vs directement C et est considérablement plus polyvalent. – bbum

+0

ehm ... Peylow vous avez raison est complètement inutile ... disons que c'est un exemple pour m'aider à formuler la question: P -.- – MatterGoal

Répondre

2

Oui, bien sûr, vous pouvez utiliser les fonctions objectif-c dans votre code c (et vice versa) si votre fichier source est compilé sous forme de code c/obj-c (a l'extension .m ou le type défini manuellement dans Xcode

Pour que les fonctions de base fonctionnent, je pense que l'importation de <Foundation/Foundation.h> et de <UIKit/UIKit.h> devrait suffire. Ces en-têtes peuvent déjà être importés dans votre en-tête précompilé (fichier * .pch), vous n'aurez donc peut-être même plus besoin de les importer.

Si vous souhaitez étendre certaines fonctionnalités de classes UIKit, envisagez également d'implémenter une catégorie de classe personnalisée au lieu d'utiliser des fonctions c simples.

+0

Et mettre votre code C dans un fichier. M pour que les choses comme @ @ foo "' sont compris par le compilateur – JeremyP

+0

Oui, bon point, je vais mettre à jour la réponse – Vladimir

0

Vous pouvez le faire assez facilement. Vous ne devriez pas avoir à importer quoi que ce soit, car vous avez déjà importé UIKit et Foundation par l'en-tête de préfixe. La fonction enregistreur ressemblerait à ceci:

// Logger.h 
void MyLog(NSString *str); 

// Logger.m 
#import "Logger.h" 
void MyLog(NSString *str) {…} 
+0

Merci zoul, à votre avis, je peux travailler avec l'extension .c ou je dois utiliser .m? – MatterGoal

+0

Vous devez utiliser '.m' pour que le compilateur comprenne Objective-C dans ces fichiers. – zoul