我有一个包含自定义对象(AssetNode)的可变数组(downloadQueue),每个对象都有一个NSMutableDictionary作为属性。
@interface AssetNode : NSObject {
NSMutableDictionary* allData;
}
@property (nonatomic, retain) NSMutableDictionary* allData;
当我从downloadQueue中删除AssetNode时,剩余的AssetNode对象的.allData属性会以某种方式被修改,最终会丢失一些值/密钥对。
-(void)removeAssetNodeFromQueue:(AssetNode*)aNode{
NSMutableArray *temp = [NSMutableArray array];
for (AssetNode* node in downloadQueue)
{
if ([aNode.nodeId isEqualToString:node.nodeId])
{
[temp addObject:node];
}
}
[downloadQueue removeObjectsInArray:temp];
}
知道为什么会发生这种情况或者如何维护字典信息的完整性?
答案 0 :(得分:0)
在代码中修改allData
的每个位置添加NSLog或断点。记录整个字典。我希望你的代码中有一个错误,而不是NSMutableDictionary意外丢失你的数据。
答案 1 :(得分:0)
是的,保留要删除的对象的字典
if ([aNode.nodeId isEqualToString:node.nodeId])
{
[temp addObject:node];
[temp.allData retain];
}
但我建议将allData存储到另一个变量中,否则你会泄漏内存。
查看苹果自动参考计数(ARC),这个文档很好: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH
如果您希望我快速向您解释保留计数,请评论我的答案。
干杯