2010-02-07 3 views
1

Comment pouvez-vous utiliser #import circulaire pour des objets fortement typés en Objective-CComment pouvez-vous utiliser #import circulaire fortement objets typés en Objective-C

J'ai une classe de contrôleur audio, une classe de menu et un Gameview classe.

Le délégué de l'application met en place ces classes et attribue un des pointeurs alors:

la classe de menu est au courant de la classe audio et Gameview la classe Gameview a une référence à la classe audio et le menu

I J'utilise NSObject pour la référence à la classe gameview de la classe de menu. Cela est dû au fait que la classe de menu a une référence à la classe gameview et a une déclaration #import gameview.h. Le code ne sera pas compilé aveC#import circulaire

Suggestions s'il vous plaît :)?

@interface MenuViewController : UIViewController { 

    NSObject *gameref; // weak type here to avoid include of gameview above 
    AudioController *audioref; 

} 

et ...

#import "AudioController.h" 
#import "MenuViewController.h" 

    @interface GameViewController : UIViewController { 

     MenuViewController *menuref; 
     AudioController *audioref; 

    } 
+0

Quel est le message d'erreur exact que vous obtenez? En outre, 'id' est le type universel plus standard. Dans ce cas, vous devriez faire comme le suggère jib plutôt que d'utiliser 'id' ou' NSObject * '. – outis

+0

Je recevais un avertissement de compilateur en raison de la dactylographie de gameref en tant que NSObject au lieu d'un gameviewcontroller lors de l'appel d'une méthode – PeanutPower

Répondre

5

Fisrt, dans votre fichier .h utilisation

@class GameViewController, AudioController 

et

@class AudioController, MenuViewController 

dans votre fichier .m utilisation

#import "GameViewController" 
#import "AudioController" 

et

#import "AudioController.h" 
#import "MenuViewController.h" 

Il n'y a pas de problème "de référence circulaire. Deuxièmement, l'utilisation de NSObject au lieu du nom de classe réel n'est en aucun cas une référence faible. Aussi, si vous voulez dire #include dire #include. Si vous voulez dire # import, dites # import.

+0

Salutations, je suis content que vous ayez compris ce que je voulais dire. Plus d'avertissements du compilateur YAY :) – PeanutPower

Questions connexes