最近遇到一道题怎么优化for循环,平时习惯性用for...in,但一直没有比较过,今天自己总结一下。
当枚举一个NSArray的时候:
使用 for (id object in array) 如果是顺序枚举
使用 for (id object in [array reverseObjectEnumerator]) 如果是倒序枚举
使用 for (NSInteger i = 0; i < count; i++) 如果你需要知道它的索引值,或者需要改变数组
尝试 [array enumerateObjectsWithOptions:usingBlock:] 如果你的代码受益于并行执行
当枚举一个NSSet的时候:
使用 for (id object in set) 大多数时候
使用 for (id object in [set copy]) 如果你需要修改集合(但是会很慢)
尝试 [array enumerateObjectsWithOptions:usingBlock:] 如果你的代码受益于并行执行
当枚举一个NSDictionary的时候:
使用 for (id object in set) 大多数时候
使用 for (id object in [set copy]) 如果你需要修改词典
尝试 [array enumerateObjectsWithOptions:usingBlock:] 如果你的代码受益于并行执行
这些方法可能不是最快的,但他们都是非常清晰易读的。所以请记住,有时是在不写干净的代码,和快速的代码之间做出选择,你会发现,你可以在两个世界得到最好的。