【发布时间】:2010-10-20 17:11:53
【问题描述】:
我已经关注这个问题很长时间了,非常感谢任何帮助或建议。我确定它很简单,但我似乎找不到它。在我的应用程序委托中,我使用以下代码加载了一堆附件对象(我创建的一个支持 NSCopying 的对象):
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 异常。如果我在循环中取出附件的释放,一切都很好 - 但我正在泄漏附件对象(这对我来说似乎很明显 - 如果我初始化它并分配它,我的工作就是释放它)。
当我在调试器中逐步执行此操作时,我看到 init、copy 和 dealloc 方法都按预期在我的 Accessory 对象上触发。如果您认为有帮助,我也可以发布 Accessory 对象的代码,但我认为问题出在此代码中。
【问题讨论】:
标签: iphone cocoa-touch crash memory-management