我一直在盯着這個相同的問題很長一段時間了,並會真正感謝任何幫助或建議。我確定它很簡單,但我似乎無法找到它。在我的應用程序委託我加載了一堆輔助對象(一個對象,我創建,它支持NSCopying)用下面的代碼:iPhone SDK內存管理問題 - 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];
這是定義的方法調用它的:
-(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;
}
當我開始使用accDict時,我收到了一個EXC_BAD_ACCESS
異常。如果我在循環中取出配件的發佈版,一切都很好 - 但是我泄漏了Accessory對象(這對我來說似乎是obv。 - 如果我初始化並分配了它,那麼我的工作就是釋放它)。
當我在調試器中逐步完成此操作時,我發現init,copy和dealloc方法都會按照預期在我的Accessory對象上觸發。如果您認爲它會有所幫助,我也可以發佈Accessory對象的代碼,但我認爲問題出現在此代碼中。
知道屬性「value」是如何定義的以及訪問方法中發生了什麼很重要。那裏有保留和發佈嗎? – 2009-04-21 02:37:39