现在,我的应用程序检索大约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。我可以采取哪些措施来加快循环过程
答案 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类型,没有别的。