2013-06-26 86 views
3

我认为我的iPhone应用程序出现了一些性能问题。加载,保存和重新加载数据的最佳方式

我喜欢向您展示如何从互联网加载数据,将它们存储在电话上并重新加载它们以在表格视图上打印出来。 我在应用程序上有几个模块,所以我希望它是好的,如果我解释我用来做的一般方式,也许你们中的一个人有了一个想法。

数据量约为250个数据集,包含10-20个数据字段(整数/文本)。

步骤1:由URL请求获得一个JSON数据串

我将一个URL请求与一些限制值(例如city_id和LAST_UPDATE_TIME)开始一个的MySQL数据库的请求限制结果。

第2步:将JSON对象保存到iPhone上的SQLite3数据库。

我会这样做,因为我喜欢在离线模式下使用数据。 这部分应该是重量级的一部分,因为它占总时间的3/4。 我运行了这些对象,并检查是否之前保存过这个对象。 (这里我使用import_id来标识MySQL数据库对象) 如果我确实找到了它,我会更新这个数据集,否则我会插入它。

步骤3:从SQLite的重新加载数据,放入一个NSMutableArray

此Array将由TableView中使用。

注意:数据将在主线程中加载。其他线程将用于延迟加载一些拇指或显示一个旋转轮。

程序中是否存在大错误?我应该在另一个线程中加载数据,但是此时应该在视图中显示什么内容?

什么是最好的方法?

+0

你的想法看起来不错;不过,我会在后台加载和填充数据库,并可能向用户显示一个活动指示器。 – Jeremy

+0

基本上没问题,尽管弄明白如何使用一个“懒惰”的数组方案可能是明智的,该方案仅在被引用时才从数据库加载单个元素(有点类似于TableViews管理行)。有几种方法可以解决这个问题。 (请注意,在启动过程中加载整个阵列会产生“糟糕的用户体验”,并可能导致应用程序被迫中止。) –

+0

@Jeremy我实现了一个“Spinning Wheel”来显示用户,数据将被加载 –

回答

2
  • 嵌入一个JSON文件到您的应用程序包,涉及到当前数据从你的json解析。这将用于第一次脱机使用只是为了这种情况,
  • 更新你的json文件,只要设备在线,但只有当你的解析版本与你有不同时更新。
  • 随时随地使用该json文件您的设备脱机
  • 由于您的包中的json文件将始终是最新版本,因此请将您的表数据加载出来。

希望这些会帮助你。

+0

我想我会在实际项目中使用这种方式。谢谢! (其他想法我会记住未来的项目,感谢所有其他人!) –

4

这里有一些想法:

  1. 使用AFNetworking,使生活更方便自己。它使异步和简单的Web服务获得JSON返回。
  2. 而不是直接使用SQLite使用Core Data。使用它比任何其他应用程序中的任何实际持久性都容易得多。
  3. 而不是以这种方式手动执行,将结果输入到Core Data中(请参阅步骤2),可以使用NSFetchedResultsController直接从Core Data加载表视图。这需要照顾很多东西的你,如应对变化,高效的内存管理,处理变化的数据等
+0

感谢这个不错的想法,我想我会在未来的项目中使用它们,但是现在我希望我能够解决这个问题,而不用像SQLite或Core Data这样基本的东西改变。 AFNetworking看起来不错,但Step1(加载JSON数据)不需要太多时间。我想我已经把加载和保存数据的完整过程(步骤1 + 2)放到了后台进程中。我希望这可以解决性能问题。 –

相关问题