尽可能快地循环数组的最佳方法是什么?

时间:2016-03-13 20:10:31

标签: ios swift

现在,我的应用程序检索大约1000个CKRecords,它们被放入一个数组中。我需要稍后循环遍历此数组。当我只有大约100条记录循环浏览我的应用程序时工作顺利而快速,但现在随着记录数量的增加它变得越来越慢。我计划有大约3000个CKRecords来检索,这对我来说可能是一个严重的问题。

这就是我现在想出来的:

//movies == The NSMutableArray
if let recordMovies = movies.objectEnumerator().allObjects as? [CKRecord] {
        for movie in recordMovies {
       //Looping
       print(movie.objectForKey("Title") as? String)
       {
    }

但这并没有多大帮助,因为我必须将NSMutableArray变成一个CKRecords数组。我这样做是因为我必须在循环时访问CKRecords属性,例如movieTitle。我可以采取哪些措施来加快循环过程

2 个答案:

答案 0 :(得分:1)

迭代数组中的1000(或5000)个元素应该只需要一小段时间。

然而,打印到调试控制台非常慢。如果您的打印声明,请删除。

如果movies是CKRecord对象的数组,为什么不能将它转换为所需的数组类型?

let start = NSDate.timeIntervalSinceReferenceDate()
if let recordMovies = movies as? [CKRecord] {
  for movie in recordMovies {
    //Do whatever work you need to do on each object, but DON'T use print
  {
}
let elapsed = NSDate.timeIntervalSinceReferenceDate() - start
print( "iterating through the loop took \(elapsed) seconds")

答案 1 :(得分:0)

通过制作电影"您可以节省大量时间。不仅仅是一个NSMutableArray,而是一个CKRecords的NSMutableArray,这使得不必将数组从NSMutableArray转换为CKRecord的Swift数组。

在Objective-C中:而不是

NSMutableArray* movies;

你使用

NSMutableArray <CKRecord*> *movies;

因此,电影[1]例如将具有CKRecord *类型,而不是id。作业电影[1] =某事;要求&#34;某事&#34;是CKRecord *或id类型,没有别的。