iphone大型NSArray的字符串性能问题

时间:2010-02-05 05:16:01

标签: iphone performance nsarray

我有一个带有大型嵌套NSArray字符串的Iphone应用程序。 NSArray的深度为3级,最深处总共有大约15,000个字符串。绝大多数字符串的字符少于20个。每隔一段时间,我的应用程序会暂停一段时间,然后在5-25秒左右后恢复工作。这显然是不可接受的。如果我只使用2000个字符串来运行应用程序,则挂起变得更加罕见。所以我很确定大型NSArray会导致问题。

哪种替代数据结构可能会更好地运作?我需要的是在应用程序启动时从文件中快速读取数组,然后能够从数组中随机访问字符串。 [它实际上比那复杂一点;我需要能够从预定的数组子集中获取随机字符串。]程序可能会每秒捕获一个随机字符串。

顺便提一下,NSArray目前存储在单例类中。

2 个答案:

答案 0 :(得分:2)

有了这么多的字符串,就不可能一次把它们放在一个表中(右边???)。

你真的,真的需要将它们放在数据库中并按需访问它们。 Core Data专为持久化大型对象图而量身定制,让您快速提取所关注的部分,同时为您提供幕后操作。

对于乐器,您确实希望使用Time Profiler来查看系统一直在哪里花费 - 最好是在设备本身上。您可能会发现在自动释放对象中花费了大量时间(例如,长时间的随机暂停似乎是一个标志) - 这将对应于不断消除大部分数组。

答案 1 :(得分:1)

虽然其他数据结构(trie)确实浮现在脑海中,但真正的问题是:

(1)您是否可以在这些挂起期间使用乐器进行简介

并且不一定正确地假设数组是你的问题

(2)您在阵列上执行了哪些操作?

除非您无法选择,否则您不想猜测导致性能问题的原因。但是,如果你让我猜测...我想知道你是否在内存上运行紧张,如果系统发出低内存警告和清理事件,那就不知道了。