我正在将plist中的数据加载到我的应用程序中的tableview中。数据存储在可变字典的可变字典中。 这是我的viewDidLoad方法:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Categories";
// load data from plist fle
self.categories = [[[NSMutableDictionary alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"InventoryItems" ofType:@"plist"]] autorelease];
// add buttons to navigation menu
self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.navigationItem.leftBarButtonItem = self.addButton;
}
我的tableview是可编辑的,因此用户可以删除类别。在我的commitEditingStyle:forRowAtIndexPath:方法中,我更新了我的数据模型:
[self.categories removeObjectForKey: [[self.categories allKeys] objectAtIndex:indexPath.row]];
当我描述我的应用程序时,它会泄漏内存。我不是很精通使用配置文件工具,但每次删除行时,它似乎都会在我的类别字典中发现泄漏。
我想知道我错过了什么?我要删除的对象是否也是一个问题,我也需要删除它的对象?
答案 0 :(得分:3)
这种泄漏(如果财产被保留或复制):
self.categories = [[NSMutableDictionary alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"InventoryItems" ofType:@"plist"]];
请改用:
categories = [[NSMutableDictionary alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"InventoryItems" ofType:@"plist"]];
或者这个:
self.categories = [[[NSMutableDictionary alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"InventoryItems" ofType:@"plist"]] autorelease];
答案 1 :(得分:0)
我想知道这会给你带来什么不同吗?
NSMutableDictionary *d = [[NSMutableDictionary alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"InventoryItems" ofType:@"plist"]];
self.categories = d;
[d release];