Iphone 字典数组
我有一个Iphone 字典数组,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我有一个NSMutableArray,purDesc,它包含一个NSMutableDictionary,purDetails。当我使用NSLog(@“%@”,purDesc)时它返回应该有字典的空格,如下所示: singleton purDesc Dump:( { }, { }, { }, { }, { } ) 现在,每次添加字典时,大小/外观/转储都会发生变化,以反映添加/
NSMutableArray
,purDesc
,它包含一个NSMutableDictionary
,purDetails
。当我使用NSLog(@“%@”,purDesc)时代码>它返回应该有字典的空格,如下所示:
singleton purDesc Dump:(
{
},
{
},
{
},
{
},
{
}
)
现在,每次添加字典时,大小/外观/转储都会发生变化,以反映添加/删除字典的次数。以下是取自我的XML解析器的代码片段:
我做错了什么?为什么日志显示为半空?我看到您这样做:
[purDesc addObject:purDetails];//adds purDetails dictionary to purDesc
[purDetails removeAllObjects];
在purDesc中存储对purDetails的引用,并增加其保留计数,但不复制。因此,如果删除所有对象,词典的内容将丢失。您在purDesc中“存储”了对它的引用这一事实并不会改变这一点。我猜你看到的是这个或类似行动的结果
你不能重复使用这本词典。每次你都必须分配并初始化一个新的。您应该发布您拥有的本地版本,但不清除它
我需要查看更多的代码,以了解如何改进设计,从而使这不是一个问题,并且内存管理得到正确处理。我看到您做到了:
[purDesc addObject:purDetails];//adds purDetails dictionary to purDesc
[purDetails removeAllObjects];
在purDesc中存储对purDetails的引用,并增加其保留计数,但不复制。因此,如果删除所有对象,词典的内容将丢失。您在purDesc中“存储”了对它的引用这一事实并不会改变这一点。我猜你看到的是这个或类似行动的结果
你不能重复使用这本词典。每次你都必须分配并初始化一个新的。您应该发布您拥有的本地版本,但不清除它
我需要查看更多的代码,以了解如何改进设计,从而使这不是一个问题,并且内存管理得到正确处理。您实际如何填充数组和字典?我猜字典是空的。什么是singleton,什么是[singleton purDesc]?它与purDesc有什么关系?很难真正看到发生了什么,更不用说什么是错的。如果我记录它们,它会显示值。例如,NSLog(@“Dump:%@,[purDetails description]);返回Dump:{amt=“1.29”;desc=test;}是,但这是详细信息。我需要看更多的代码,看看什么是什么,什么是错的;但是当登录到第二行时,它会显示{}。如果我向purDesc添加另一个purDesc,purDesc将显示{}{}。如果我添加另一个,它将变成{}{}{},等等。顺便说一下,您不需要NSLog
[…说明]
。只需执行NSLog(@“%@”,purDesc)
就足够了。您实际上是如何填充数组和字典的?我猜字典是空的。什么是singleton,什么是[singleton purDesc]?它与purDesc有什么关系?很难真正看到发生了什么,更不用说什么是错的。如果我记录它们,它会显示值。例如,NSLog(@“Dump:%@,[purDetails description]);返回Dump:{amt=“1.29”;desc=test;}是,但这是详细信息。我需要看更多的代码,看看什么是什么,什么是错的;但是当登录到第二行时,它会显示{}。如果我向purDesc添加另一个purDesc,purDesc将显示{}{}。如果我添加另一个,它将变成{}{}{},等等。顺便说一下,您不需要NSLog
[…说明]
。只需执行NSLog(@“%@”,purDesc)
,就足够了。对于找到它的任何人,我只删除了行[purDetails removeAllObjects];现在,每当我需要一个新的时,我都会alloc和init。不过,请务必注意与此相关的内存管理(尤其是引用计数)问题。您应该发布您分配的内容。只是需要一些经验才能知道何时发布。我花了几周的时间才把事情做好,有时我还是要认真思考这些事情。我想ARC会让这更容易一些。已经在使用ARC了。;)大约十分钟前(在看到您的回复之前),我确实检查了泄漏情况,我可以走了。我感谢您的帮助。是的,ARC消除了大多数关于保留/释放的担忧。Delphi已经有了很多年了,对于接口来说,它让事情变得容易多了;现在,每当我需要一个新的时,我都会alloc和init。不过,请务必注意与此相关的内存管理(尤其是引用计数)问题。您应该发布您分配的内容。只是需要一些经验才能知道何时发布。我花了几周的时间才把事情做好,有时我还是要认真思考这些事情。我想ARC会让这更容易一些。已经在使用ARC了。;)大约十分钟前(在看到您的回复之前),我确实检查了泄漏情况,我可以走了。我感谢您的帮助。是的,ARC消除了大多数关于保留/释放的担忧。Delphi已经有很多年了,对于接口来说,它使事情变得容易多了。