-(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).
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 » –
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. –
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 –