2009-02-13 8 views
0
-(id)init { 

    if (self = [super init]) { 

     self.name = [[NSString alloc] init]; 
     self.type = [[NSString alloc] init]; 
     self.phoneNumber = [[NSString alloc]init]; 
     self.webAddress = [[NSString alloc] init]; 

     NSMutableArray *pricesArray = [[NSMutableArray alloc] init]; 
     NSMutableArray *poolsArray = [[NSMutableArray alloc] init]; 
     self.prices = pricesArray; 
     self.pools = poolsArray; 

     [pricesArray release]; 
     [poolsArray release]; 

     //Create the address dictionaries 
     NSMutableDictionary *addressItems = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"", KAddressStreet1Key, @"", KAddressStreet2Key, @"", KAddressBoroughKey, @"", KAddressCityKey, @"", KAddressCountyKey, @"", KAddressPostCodeKey, @"" ,KAddressCountryKey, nil]; 

     //Add dictionary to the array to contain address values 
     self.address = addressItems; 
     [addressItems release]; 

    } 

    return self; 
} 

Je suis actuellement en train de faire un énorme cycle de débogage grâce aux erreurs EXC_BAD_ACCESS .. grr.Initialisation d'une classe. Pouvez-vous voir des problèmes avec cela?

Le code ci-dessus semble-t-il correct et logique pour une méthode init de classe? Fondamentalement, je reçois les erreurs EXC_BAD_ACCESS lorsque je libère les deux pools (tableau mutable et le dictionnaire).

Répondre

0

Vous faites une fuite d'objets avec chaque allocation pour les propriétés de la chaîne. A part ça, je ne remarque rien de mal. Comment les AddressXKeys sont-ils définis?

+0

Ah ok merci Barry. Donc l'alloc est +1 et la propriété copy est aussi +1 à mon compte de retenue? touches d'adresses sont comme ceci: #define KAddressStreet1Key @ « 1address » –

+0

Oui, la propriété copie fait une copie de la chaîne et conserve une référence à la copie, de sorte que le original est perdu, mais a un compte conserver +1. Les propriétés de copie doivent être traitées comme des propriétés de conservation à des fins de gestion de la mémoire. –

+0

Indice de Freebie: le motif Cocoa pour les constantes de chaîne comme ceci est de définir une référence de chaîne globale. De cette façon, vous pouvez comparer les pointeurs plutôt que d'utiliser - [NSString isEqual:]. Voir http://stackoverflow.com/questions/538996/constants-in-objective-c/539191#539191 –

1

Comment vos propriétés sont-elles déclarées? Si elles ne sont pas déclarées avec retain, la plupart de vos objets seront désalloués à la fin de cette méthode.

+0

Ah oui, excuses. les collections sont 'retenez' et les chaînes sont 'copie' –

Questions connexes