2

我有一个包含自定义对象(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];
}

知道为什么会发生这种情况或如何保持字典信息的完整性吗?

4

2 回答 2

0

allData在代码中修改的每个点添加一个 NSLog 或断点。记录整个字典。我希望您的代码中存在错误,而不是 NSMutableDictionary 意外丢失了您的数据。

于 2013-09-19T23:56:42.047 回答
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

如果您想让我快速向您解释保留计数,请评论我的回答。

干杯

于 2013-09-20T07:14:44.327 回答