所以我用 Xcode 做了那件事,你说分析,它发现了泄漏和东西,在这里,它说我正在泄漏(在下面的代码中标记)。
// Copy dictionary to memory
NSString *filepath = [[NSBundle mainBundle] pathForResource:@"DataCategoriesDictionary" ofType:@"plist"];
NSDictionary *dataCategoriesDictionary = [[NSDictionary alloc] initWithContentsOfFile:filepath];
self.choices = [[NSMutableDictionary alloc] initWithDictionary:[dataCategoriesDictionary objectForKey:self.chosenCategory]]; // LINE 55
[dataCategoriesDictionary release]; // HERE, the compiler says "Potential leak of an object allocated on line 55"
尽管我可能泄漏实例变量没有任何意义,但我尝试为其添加一个发布语句,Xcode 仍然给了我同样的错误。我还能泄露什么?
最佳答案
如果选择是带有保留的属性,那么您就会泄漏 NSMutableDictionary。
[[NSMutableDictionary alloc] initWithDictionary
自动释放或使用临时释放。
self.choices = [[[NSMutableDictionary alloc] initWithDictionary:[dataCategoriesDictionary objectForKey:self.chosenCategory]] autorelease];
或者(我最喜欢的)
self.choices = [NSMutableDictionary dictionaryWithDictionary:[dataCategoriesDictionary objectForKey:self.chosenCategory];
或
NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithDictionary:[dataCategoriesDictionary objectForKey:self.chosenCategory]];
self.choices = tempDict;
[tempDict release];
关于iphone - 编译器说存在内存泄漏,但我没有看到内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493894/