我目前正在尝试自己进行 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一种或另一种方式使用似乎可以防止释放它指向的内存。为什么?
帮助表示赞赏!