1

我正在阅读许多 plist 并将它们显示在 UITableview 中。问题是,应用程序本身非常慢,我确实阅读了一些关于归档或序列化的内容,归档是否会使应用程序更快,或者如果我想使用大量数据,我会尝试使用 sqlite 吗?

如果有人能帮我告诉我如何归档我的数据或如何序列化数据以优化 plist,那就太好了。

这就是我所拥有的:(我在“数据”中收集所有数组)

- (void) makeData {
    data = [[NSMutableArray alloc] init];
    sectionArray = [[NSMutableArray alloc] init];

    //here we connect each array built with the remote plist on the server - different plists for each
    amenajariArray = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://..../amenajari.plist"]];
    apicultoriArray = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://..../apicultori.plist"]];
    asigurariArray = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://..../asigurari.plist"]];
4

2 回答 2

1

您正在发出看起来是三个同步 Web 请求来获取数据。您应该至少使这些异步和并行。您还可以采用在后台同步或更新数据并使用默认数据集开箱即用的方法。查看并发编程指南中的 dispatch_async 块或操作队列。您还可以查看ASIHttpRequest中的异步方法。您必须找到一种方法来不阻塞 UI 线程以连续阻塞 http 请求。另一个关于 GCD 异步 UI 的 SO 帖子: performSelectorOnMainThread with multiple parameter

此外,如果您要保留许多数据列表并且开始遇到性能问题,您可能需要查看sqlite核心数据(由 sqlite 支持)。

请记住,如果您要保留列表,则修改一项/属性将写入整个列表。此外,如果您要存储许多列表(特别是如果数据之间存在关系),则数据库可能更合适。它还可以提供更快、更优化的查询模式。

于 2012-05-27T15:45:48.977 回答
0

在上述情况下,您的数组已经以 plist (xml) 格式序列化。即使您序列化为二进制格式,也不会随心所欲地提高性能。

为了提高性能,您可以使用延迟加载概念来填充表视图数据源的数组。或者显示前 25 行,然后显示下 25 行的按钮。这些东西需要 sqlite 或核心数据。

于 2012-05-27T16:06:18.040 回答