0

我看过很多 NSXMLParser 的示例并了解它是如何工作的。例如,这个非常好:

http://wiki.cs.unh.edu/wiki/index.php/Parsing_XML_data_with_NSXMLParser

我看到的所有示例都使用 Release 在解析过程中的某个时间点释放临时对象,这没关系。但是如果我打开 ARC,我根本无法访问 release。那么示例代码如何变化呢?

例如,请查看上面的代码(链接)并解释如何使用 ARC ON 更改它?

谢谢。

4

2 回答 2

1

有关如何使用 ARC 启用非 ARC 代码的讨论,我建议您参阅Transitioning to ARC Release Notes。正如 Midhun 所暗示的,您将用retain引用替换strong引用并消除releaseand autorelease。您还将删除对[super dealloc]. 所以转换并不难,但有许多项目需要注意。

话虽如此,我不同意您对这个示例代码“相当不错”的评价。在没有侮辱原作者的情况下,它有点过时了,因此,它正在应用历史惯例而不是现代当代实践(例如,明确声明 ivars 用于属性,不使用下划线作为 ivar 名称等)。我还注意到代码中的一些错误(诸如缺少属性之类的小问题,诸如foundCharacters例程中的错误之类的更重要的事情等)。

我已经清理了代码(将其转换为 ARC 并解决了许多此类问题)并将其上传到GitHub 上的存储库。注意,我做了两件事:

  1. 我已经修改了代码,使其在实践中更加现代(这是UsersParser类)并修复了其中一些小错误;

  2. 我还对这段代码做了一个更灵活的版本XmlArrayParser,其中解析器类没有硬编码用于示例使用的用户 XML 文件。调用它的方法必须了解我们要查找的元素,但解析器本身并不关心。

我希望这会有所帮助。

于 2012-12-20T09:19:41.863 回答
0

当您将其转换为 ARC 时,将不会有任何

  • 保持
  • 释放
  • 自动释放

关键字。

为了更好地理解,您应该使用 Xcode ARC 转换工具转换该示例代码。当你完成它时,你会得到更好的理解。请参阅本教程以获得帮助。

于 2012-12-20T04:20:19.743 回答