Je suis lentement apprendre le développement de l'iPhone et semblent garder les murs frapper là où je ne peux pas savoir comment faire ce que je veux faire de la bonne façon :(Exemple de création d'une fabrique de données pour l'accès aux données de base dans le cacao (iPhone)?
Fondamentalement, je veux une classe qui gère toutes les interactions avec la couche de données, par exemple, obtenir un tableau mutable d'une liste d'objets du magasin de données
Ceci est assez trivial dans d'autres langues où vous avez un garbage collector, mais en Objective-C sur l'iPhone, je '' Je ne suis pas sûr quoi faire
Ceci est un exemple de méthode sur une classe DataFactory que nous étions en train de créer Notez le commentaire sur où nous ne sommes pas sûrs quand nous allons publier ....
- (NSMutableArray*)fetchAllDrivers{
NSMutableArray *results = [[NSMutableArray alloc] init];;
if (self.appDelegate != nil) {
NSManagedObjectContext *context = [self.appDelegate managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
[request setEntity: entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil];
[request setSortDescriptors: sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error;
results = [[context executeFetchRequest:request error:&error] mutableCopy];
if (results == nil) {
//something went wrong
}
//Where should this be released??? Certainly not here!
[results release];
[request release];
}
else {
[NSException raise:@"Can't fetch b/c app delgate is nil!" format: @"!!!"];
}
return results;
}
Indicatif téléphonique, lié à mon commentaire:
NSMutableArray* arr = [dataFactory fetchAllDrivers];
[arr retain];
//Some code where we use arr
[arr release];
Ah, je me demandais quand utiliser autorelease! Donc, si je me souviens de mon apprentissage de la gestion de la mémoire correctement, le code appelant devra impliquer la propriété dans l'objet retourné droit? (voir le code que j'ai ajouté au bas de ma question) – spilliton
Vous avez le groove maintenant. Vous devriez vérifier que arr n'est pas nul. – falconcreek