Cocoa ou Foundation ?
tablier
Membre
Je viens de démarrer un projet (Mac OSx) avec Xcode 4.3.2 sous 10.7.5.
Le fichier AppDelegate.h du projet importe bien Cocoa.h : #import <Cocoa/Cocoa.h>
J'ajoute des fichiers en sélectionnant "Objective-C class" dans la fenêtre de choix des "Templates".
Dans tout ces fichiers l'import est: #import <Foundation/Foundation.h>
Il me semble que c'est une erreur.
Bien sur, je peux corriger, mais j'aimerais bien connaitre le pourquoi de cette chose qui me parait illogique. Vous avez un avis?
Le fichier AppDelegate.h du projet importe bien Cocoa.h : #import <Cocoa/Cocoa.h>
J'ajoute des fichiers en sélectionnant "Objective-C class" dans la fenêtre de choix des "Templates".
Dans tout ces fichiers l'import est: #import <Foundation/Foundation.h>
Il me semble que c'est une erreur.
Bien sur, je peux corriger, mais j'aimerais bien connaitre le pourquoi de cette chose qui me parait illogique. Vous avez un avis?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si tu as Cocoa.h d'importé dans ton Precompiled Header tu n'as pas de soucis à te faire, il sera importé dans tous tes .h automatiquement.
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
et ça répond à ma question. Mais quand même, demander une classe Cocoa et avoir un import de Foundation ça surprend.
Cocoa = Foundation + AppKit/UIKit.
Si on travaille sur des classes Modèle, alors on n'a pas besoin des classes de l'IHM.
Si on a besoin d'ivar ou de méthodes avec des arguments provenant de AppKit, on définie le symbole en @class et on fait l'import approprié dans l'implémentation. Cela évitera des imports trop lourd lorsque notre .h sera utilisé.
Dans ce cas d'ajout de fichier, sous les Xcode précédents l'import était Cocoa.h.
J'accède au objets du .nib, donc l'import de Cocoa.h me paraissait plus normal.
Le changement est fait pour mutualiser les template avec iOS.
Certe on accède au NIB mais on y accède pour un usage interne, donc en toute logique, c'est du @class et un import dans l'implémentation.
#ifdef __OBJC__
avant les imports.
Je présume que ça veut dire "Si on est dans un projet Objective-C..." ?
Parce que j'importe des fichiers.h dans le préfix.pch, mais je ne les mets pas dans cette condition, qui n'a pas l'air importante...
Si le fichier dans lequel on est importé est en ObjC.
Le pch est un header commun à tous les fichiers compilé de l'application, si tu as des bouts de code C et que tu fait un import non protégé tu aura l'import de fait dans le code C sans pour autant avoir un compilo qui accepte cette syntaxe.
@Yoann Je te prends à faire une faute pas évidente du tout parce que la faute ne change pas la prononciation de la phrase: Tu as trouvé?
Rassures toi, j'en fais des pires que celle la!
OK, merci.
Pourtant, en pratique, j'ai déjà eu des problèmes avec Xcode en mettant des #import à l'intérieur de ce #ifdef, sur 2 projets récemment.
Bug de Xcode (ou de CodeSense) ? J'en sais rien mais du coup ça m'a perdu pas mal de temps ce truc à l'époque...
En effet, cela dit je suis très mauvais à l'écris ^^
...tant qu'on n'a pas une sous classe d'un objet d'UI....
J'ai eu le même type de soucis. L'analyse de code durant l'écriture gère très mal le PCH, je m'en suis rendu compte avec mes macro de log.
Donc ça sent le bug de CodeSense (qui ne prend pas en compte le __OBJC__ quand il compile JIT à la volée) c'est nul ça... et du coup seule solution mettre le #import à l'extérieur du #ifdef... autrement dit on perd tout l'intérêt de ce #ifdef... c'est bien la peine !