Il semble que vous rencontriez peut-être le problème de l'utilisation abusive de Singletons pour gérer des contrôleurs qui n'ont pas besoin d'être des Singletons. Cela peut être utile:
J'ai récemment retravaillé mon programme entier de singleton à des objets passant le long comme ils sont nécessaires. Notez que les objets globaux singleton et partagés ne sont pas identiques et que les propres classes d'Apple utilisent sharedObject
ou defaultObject
qui instancie et renvoie une instance partagée, mais rien ne vous empêche de créer réellement une autre instance de la classe pour vos propres besoins. D'autre part, Singleton limite l'objet à une seule instance, ce qui signifie qu'il ne doit plus avoir deux instances (ce qui pourrait être nécessaire dans le futur) pour bénéficier d'un accès complet depuis n'importe où. En ce sens, vous n'avez vraiment besoin que de la partie accès total et non de la restriction d'une instance unique, donc vous pourriez considérer le modèle sharedObject
. Voici un exemple:
// Up the top in the .m file
static MySharedClass *sharedInstance;
// A class method to return the shared instance
+ (MySharedClass *)sharedInstance {
if (!sharedInstance) {
sharedInstance = [[MySharedClass alloc] init];
}
return sharedInstance;
}
Cela dit, je considérerais la structuration de votre programme pour passer des objets car ils sont nécessaires plutôt que de mettre en place tout le monde pour l'accès par tout. Sinon, le code que vous écrivez avec une utilisation excessive des objets singleton/global est beaucoup plus couplé et ne peut pas être retiré du projet courant et utilisé ailleurs, et rend le débogage plus difficile car vous devez considérer l'état global de ces classes de gestionnaire.
Je voudrais créer mon contrôleur principal (ViewController) qui instanciera alors les autres classes de contrôleur nécessaires et passera les ressources entre eux. Ce NSArray de UIViews que vous mentionnez serait stocké aussi haut dans la chaîne que nécessaire, vraisemblablement tout en haut. Ce Présentateur créerait alors le LayoutManager et lui passerait les objets nécessaires pour un travail ultérieur. Et de la même manière, je passerais ces objets à BlockManager et ColorManager.
Je n'avais pas pensé à utiliser des délégués dans ce sens et à laisser le tableau au contrôleur de vue. Je vais essayer ça. Je suppose que la classe qui est supposée gérer tout dans la vue est le ViewController, donc logiquement cela a du sens. – jadengeller