J'ai une application iPhone qui a quelques méthodes pour recueillir des informations sur le web et qui crée ensuite un objet, qui contient ces informations en tant que propriétés (disons que j'obtiendrai des objets de type x) . Puisque je pourrais avoir besoin de ce genre d'objets à partir de différents points de l'application, j'ai mis la méthode pour créer une instance de l'objet dans un seul fichier d'implémentation et appelé ce fichier "GetDetails.m" (+ h). Dans cette méthode j'ai exclusivement des méthodes de classe *, (parmi celles-ci ma méthode pour créer l'objet x) qui créent l'objet et remplissent ses propriétés avec les informations que la méthode recueille du web.General Objective-C Question de méthode de classe
+ (ObjX *)getObjectX:(NSString *key) withParameters:(NSArray *)parameters;
Dans cette méthode mon ObjX est rempli d'informations ...
ObjX *objectX = [[ObjX alloc] init];
(...)
objectX.name = gatheredName; // etc
(...)
return objectX;
Donc, ma méthode de classe est invoquée à plusieurs points depuis l'application (BTW à partir d'un thread séparé.):
Je ne peux pas me débarrasser de la sensation que cette approche n'est pas optimale.NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
ObjX *myObject;
myObject = [GetDetails getObjectX:@"09384f9a" withParameters:nil];
[self performSelectorOnMainThread:@selector(doStuffWithNewObject:) withObject:myObject waitUntilDone:NO];
[pool release];
Je ne peux pas me débarrasser du sentiment que cette approche n'est pas optimale. L'analyseur Xcode m'indique également qu'il pourrait y avoir une fuite potentielle sur le retour objectX.
Peut-être que quelqu'un pourrait me diriger vers la bonne direction et comment je devrais faire la division des fonctionnalités en général.
* Il ne dispose pas d'une méthode init et dealloc, pas Ivars, aucune méthode d'instance ...
Modifier
Bon, évidemment le plus ne voient pas de sortie pour l'objet , donc je suppose que je n'étais pas clair avec ça - l'objet sera publié plus tard après qu'il soit assigné à une propriété d'une vue. Pourtant, je vois que c'est une pratique de retourner un objet autoreleased. Malheureusement, mon application se bloque quand je fais cela. Peut-être que c'est parce que je cours tout ce traitement dans un pool séparé de thread/autorelease? Je vais tester quelques configurations et vous laisser savoir comment ça s'est passé.
Je pense que c'est une sorte d'hybride torsion usine/méthode singleton? – Eimantas
Eh bien, probablement une méthode d'usine, mais si c'est une méthode singleton ou non est tout simplement pas pertinent je suppose ... – ff10