我看过很多 NSXMLParser 的示例并了解它是如何工作的。例如,这个非常好:
http://wiki.cs.unh.edu/wiki/index.php/Parsing_XML_data_with_NSXMLParser
我看到的所有示例都使用 Release 在解析过程中的某个时间点释放临时对象,这没关系。但是如果我打开 ARC,我根本无法访问 release。那么示例代码如何变化呢?
例如,请查看上面的代码(链接)并解释如何使用 ARC ON 更改它?
谢谢。
我看过很多 NSXMLParser 的示例并了解它是如何工作的。例如,这个非常好:
http://wiki.cs.unh.edu/wiki/index.php/Parsing_XML_data_with_NSXMLParser
我看到的所有示例都使用 Release 在解析过程中的某个时间点释放临时对象,这没关系。但是如果我打开 ARC,我根本无法访问 release。那么示例代码如何变化呢?
例如,请查看上面的代码(链接)并解释如何使用 ARC ON 更改它?
谢谢。
有关如何使用 ARC 启用非 ARC 代码的讨论,我建议您参阅Transitioning to ARC Release Notes。正如 Midhun 所暗示的,您将用retain
引用替换strong
引用并消除release
and autorelease
。您还将删除对[super dealloc]
. 所以转换并不难,但有许多项目需要注意。
话虽如此,我不同意您对这个示例代码“相当不错”的评价。在没有侮辱原作者的情况下,它有点过时了,因此,它正在应用历史惯例而不是现代当代实践(例如,明确声明 ivars 用于属性,不使用下划线作为 ivar 名称等)。我还注意到代码中的一些错误(诸如缺少属性之类的小问题,诸如foundCharacters
例程中的错误之类的更重要的事情等)。
我已经清理了代码(将其转换为 ARC 并解决了许多此类问题)并将其上传到GitHub 上的存储库。注意,我做了两件事:
我已经修改了代码,使其在实践中更加现代(这是UsersParser
类)并修复了其中一些小错误;
我还对这段代码做了一个更灵活的版本XmlArrayParser
,其中解析器类没有硬编码用于示例使用的用户 XML 文件。调用它的方法必须了解我们要查找的元素,但解析器本身并不关心。
我希望这会有所帮助。
当您将其转换为 ARC 时,将不会有任何
关键字。
为了更好地理解,您应该使用 Xcode ARC 转换工具转换该示例代码。当你完成它时,你会得到更好的理解。请参阅本教程以获得帮助。