新人初学ios,对于for循环遍历和forin循环遍历的使用场景很混乱,希望有人能指点迷津。

解决方案 »

  1.   

    没啥区别,看习惯
    for循环主要用在你已经知道了循环的次数
    比如你要在屏幕上打出100个"hello word!"
    那么就可以用for (int i=0;i<100,i++)
    这里你已经很明确了是100for in主要是方便遍历已经知道对象类型的数组
    同时不关心索引的情况
    比如已经知道数组里都是uibutton
    那么你就可以直接用
    for uibutton *tmpbutton in array
    这样你就可以直接通过tmpbutton直接访问数组里的每一个button另外数组还有一种用block遍历的方法
                    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                        //.....
                    }];
    这种方法有一个要注意的地方就是可能会有异步执行的问题最后网络上有人分别对这三种遍历方式进行了效率方面的测试
    结果是for in的效率是最高的
      

  2.   

    for in 遍历可变数组的时候,如果你再遍历里面添加或者删除元素的时候,枚举器可能会分配错误的元素数据,甚至崩溃
    因为对于数组的变成,for in 遍历的枚举器是不知道容器的数据变更的
    而普通的for 循环遍历是知道的,但是效率上略慢一点点
      

  3.   

    for in 循环遍历比for更高级一些,当你数组里面的元素对象都一样,就可以用for in进行遍历,进行接受的对象跟数组里面所存储的是同一种类型
      

  4.   

    可以参考牛人博客 http://blog.sunnyxx.com/2014/04/30/ios_iterator/ 非常详细 博客片段
    我是前言集合的遍历操作是开发中最常见的操作之一,从C语言经典的for循环到利用多核cpu的优势进行遍历,开发中ios有若干集合遍历方法,本文通过研究和测试比较了各个操作方法的效率和优略势,并总结几个使用集合遍历时的小技巧。ios中常用的遍历运算方法遍历的目的是获取集合中的某个对象或执行某个操作,所以能满足这个条件的方法都可以作为备选:经典for循环
    for in (NSFastEnumeration),若不熟悉可以参考《nshipster介绍NSFastEnumeration的文章》
    makeObjectsPerformSelector
    kvc集合运算符
    enumerateObjectsUsingBlock
    enumerateObjectsWithOptions(NSEnumerationConcurrent)
    dispatch_apply
    。。