Ich habe dieses Problem schon seit längerem betrachtet und würde mich über jede Hilfe oder Vorschläge freuen. Ich bin sicher, es ist etwas Einfaches, aber ich kann es nicht finden. In meinem AppDelegate bin Laden ich eine Reihe von Zubehör Objekte up (ein Objekt, das ich geschaffen, die NSCopying unterstützt) mit dem folgenden Code:Probleme bei der Verwaltung von iPhone SDK-Mems - EXC_BAD_ACCESS
NSString *path = [[NSBundle mainBundle] pathForResource:@"Accessories" ofType:@"plist"];
NSDictionary *accDict = [[NSDictionary alloc] initWithContentsOfFile:path];
self.colors = (NSArray *) [accDict objectForKey:@"Colors"];
self.exteriorAccessories = [self loadAccessoriesForMode:EXTERIOR_MODE withDictionary:accDict];
self.interiorAccessories = [self loadAccessoriesForMode:INTERIOR_MODE withDictionary:accDict];
[accDict release];
Und das ist die Definition für das Verfahren seine Berufung:
-(NSArray *)loadAccessoriesForMode:(NSString *)mode withDictionary:(NSDictionary *) dictionary
{
NSMutableArray *tempValues = [[NSMutableArray alloc] init];
for (NSDictionary *value in [dictionary objectForKey:mode])
{
Accessory *accessory = [[Accessory alloc] initWithDictionary:value];
[tempValues addObject:accessory];
[accessory release];
}
NSArray *returnArray = [[NSArray alloc] initWithArray:tempValues copyItems:YES];
[tempValues release];
[returnArray autorelease];
return returnArray;
}
Wenn ich zur Freigabe für accDict komme, bekomme ich eine EXC_BAD_ACCESS
Ausnahme. Wenn ich die Freigabe von Zubehör innerhalb der Schleife herausnehme, ist alles in Ordnung - aber ich lecke Zubehörobjekte (was mir obv. Erscheint - wenn ich es einleite und es zuweise, ist es meine Aufgabe, es freizugeben).
Wenn ich dies im Debugger durchlaufen, sehe ich die Init, kopieren und Dealloc-Methoden alle auf mein Accessory-Objekt wie erwartet auslösen. Ich kann auch Code für das Accessory-Objekt eingeben, wenn Sie denken, dass es hilft, aber ich denke, das Problem liegt irgendwo in diesem Code.
Es ist wichtig zu wissen, wie die Eigenschaft „Wert“ definiert ist und was in seinen Accessormethoden passiert. Gibt es da noch Überreste und Freisetzungen? –
Ja, Wert ist eine Eigenschaft mit (nicht atomisch, behalten). Meine Vermutung war also, dass das Aufrufen von "value =" nur den Zeiger auf den Aufruf von retain setzt, wohingegen "self.value =" die entsprechende Setter-Methode aufruft und somit die Retain-Funktion aufruft. – Bdebeez