我需要快速简单地解析我的应用中的XML文件。对我来说最好的解决方案似乎是XML-to-NSDictionary转换器,我可以更容易地挖掘它。
我选择使用这个小班:http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/
但是我对返回的NSDictionary*
及其在内存中的状态感到困惑。类方法dictionaryForXMLData
分配并进入类。然后objectWithData
关闭并重复提升返回到调用者的NSDictionary
对象。
对我来说,令人困惑的部分是[reader release]
返回之前(我知道这必须发生,因为reader
的创建方式)。我对NSDictionary
的理解是,所有对象也将被发送release
消息,这意味着我们返回的对象不应该有保留计数。请注意,该对象是使用便捷方法创建的,只有在将其添加到堆栈时才会获得保留计数。
返回语句不应该是return [rootDictionary autorelease]
。我看到的问题是,什么时候会释放rootDictionary
,并且根据XML文件的大小,它可能会阻塞内存?或者我错了吗?
答案 0 :(得分:1)
他们在做什么是不正确的。 objectWithData:
返回的对象可能只是对reader
内保留的内容的引用。通过发布reader
,您可能会释放先前获得的rootDictionary
。根据{{1}}类的内部工作原理,它们从XMLReader
返回的内容可能会被保留并自动释放;但这是一个实现细节,你不能依赖它(加上Cocoa内存管理是本地的,所以你永远不应该关心其他函数做什么)。
正确的做法是保留你获得的objectWithData:
,然后自动释放它(以平衡保留,因为你必须在没有所有权的情况下归还它)。
rootDictionary