Iphone NSMUtableDictionary解除分配问题

Iphone NSMUtableDictionary解除分配问题,iphone,objective-c,nsmutabledictionary,Iphone,Objective C,Nsmutabledictionary,我有两种方法,都在不同的课堂上。一种是类方法,另一种是实例方法。我正在从实例方法调用类方法。当实例方法完成时,它给出运行时错误“EXC\u BAD\u ACCESS” 代码有什么问题?此外,应用程序正在为这行代码崩溃 如果我包括这一行,应用程序将崩溃 NSArray *bgColor = [[NSArray alloc] initWithArray:[xmlObject fetchImmediateChildrenValues:[del.navigationbarStyle objectForK

我有两种方法,都在不同的课堂上。一种是类方法,另一种是实例方法。我正在从实例方法调用类方法。当实例方法完成时,它给出运行时错误“EXC\u BAD\u ACCESS”

代码有什么问题?此外,应用程序正在为这行代码崩溃 如果我包括这一行,应用程序将崩溃

NSArray *bgColor = [[NSArray alloc] initWithArray:[xmlObject fetchImmediateChildrenValues:[del.navigationbarStyle objectForKey:@"backgroundcolor"]]];

如果我删除了它,应用程序将运行顺利。

我认为问题与

keys = [keys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

在sortedArrayUsingSelector的描述中,它表示它返回对原始数组的引用,但实际上您正在使用赋值覆盖该数组。为了安全起见,请指定一个新变量(并避免ev.mem泄漏)

在不应该释放对象的情况下释放对象

在fetchImmediateChildrenValues中,您释放了
val
,但它与您分配的
val
不同,它是在for循环中返回的
val
。移除alloc并释放
val

///NSString *val = ...
for(NSString *str in keys) {
    NSString* val = (NSString *)[[tmp objectForKey:str] objectForKey:@"innertext"];
    [pushArr addObject:val];
}
///[val release];
您对键也会犯同样的错误。您将密钥初始化为您拥有的(您分配了它),然后将其替换为您不拥有的(它是自动释放),然后释放释放自动释放对象的密钥。所以你过度释放了它


再次阅读有关内存管理的规则。请参见和。

这一行是正确的。我是从iphone文档中获取的。真正的问题在于NSMutableDictionAnry的正确分配和解除分配多亏了它。现在也给了我malloc:**对象0x43181e0的错误:应用程序启动时双重免费。你知道为什么会这样吗?
///NSString *val = ...
for(NSString *str in keys) {
    NSString* val = (NSString *)[[tmp objectForKey:str] objectForKey:@"innertext"];
    [pushArr addObject:val];
}
///[val release];