存档NSMutableArray

时间:2012-05-27 15:42:28

标签: ios objective-c

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

如果有人能帮我告诉我如何存档我的数据或如何序列化以优化这些数据,那将是很好的。

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

- (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"]];

2 个答案:

答案 0 :(得分:1)

您正在制作看似三个同步Web请求以获取数据。您应该至少使这些异步和并行。您还可以采用在后台同步或更新数据的方法,并使用默认数据集开箱即可。查看concurrency programming guide中的dispatch_async块或操作队列。您还可以查看ASIHttpRequest中的异步方法。您必须找到一种不阻止UI线程连续阻止http请求的方法。 GCD异步用户界面上的另一个SO帖子:performSelectorOnMainThread with multiple parameter

此外,如果您持续存在多个数据列表并且您开始遇到性能问题,则可能需要查看sqlitecore data(由sqlite支持)。

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

答案 1 :(得分:0)

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

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