我目前正在尝试自己进行 iOS 开发。现在我无法理解内存管理。这是我困惑的原因:
NSString *path = [self.dataPath stringByAppendingPathComponent:@"dummy.plist"];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
NSString *dummyKeyValue = [dict valueForKey:@"dummyKey"];
// NSLog(@"%@",[NSString stringWithString:dummyKeyValue]);
[dict release];
NSString *anotherString = [dummyKeyValue lowercaseString];
这段代码在最后一行触发了 EXC_BAD_ACCESS 错误。似乎是因为 NSDictionary 释放了它的键值。我不明白的是为什么dummyKeyValue
没有考虑定义,因为显然dummyKeyValue
仍然指向"dummyKey"
.
现在,当您注释掉该NSLog
行时,会出现下一个问题甚至更有趣的现象。以dummyKeyValue
一种或另一种方式使用似乎可以防止释放它指向的内存。为什么?
帮助表示赞赏!