iphone - 编译器说存在内存泄漏,但我没有看到内存泄漏

标签 iphone objective-c xcode memory-management memory-leaks

所以我用 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/

相关文章:

iphone - 将 Xcode 项目添加到现有项目

iphone - 如何创建 UIImageView 实例的副本?

iphone - 是否可以让您上传的 iPhone 应用程序自动更新?

objective-c - 当我不需要使用完成 block 时,如何在 swift 中声明 NULL/Void?

ios - 动态加载 Objective C 代码

ios - 类型没有成员 - 应用程序开发项目 2,Apple Pie

ios - 向 iOS 项目添加和访问二进制 blob 原始数据文件

ios - Xcode 5.1.1 未加载且无法连接 iPad

objective-c - iOS - 访问可修改的原始音乐库数据?

ios - 无法将 Player 类型的值分配给 SKSpriteNode 类型