Objective-C学习-数组 NSArray 和 NSMutableArray

  在学习 Objective-C的过程中,感觉数组在这一个学习方面是一个比较大的应用域,所以写这篇随笔来总结一下。

  首先声明的是,与C语言的数组不同,Objective-C的是数组只能用来存储对象,而不是存储int 、double、char等基础数据类型,一般要存这些基础数据类型,对于我这个刚学 Objective-C的新手来说,我的做法是将有关数字的基础类型 如 int 、double、char首先转换成一个叫做 NSNumber的类  char*类型的转换成  Objective-C的字符串  NSString 类来进行储存,相关 NSNumber 和 NSString 在以后我学习到的时候会来总结一下我的学习成果。

 

 

       Objective-C的数组分为两种,一种叫做不可变数组(NSArray),一种叫做可变数组(NSMutableArray),NSMutableArray类是NSArray类的一个子类。

  (1)不可变数组(NSArray) ---------该类型在确定之后,不能进行数组元素的更改以及交换

    //初始化------(两种方式)

 

      NSArray * array =[ [NSArray alloc] initWithObjects:@"abc",@"123",@"ABC", nil];            

      NSArray * array = @[@"abc",@"123",@"ABC"];     //后来看到老师定义数组的时候用这种方式进行的初始化,所以也记录了下来

 

  (2)可变数组(NSMutableArray)-------该类型在确定之后,可以进行元素的增、删、改(包括元素的位置 以及 数组的元素个数)  

               //初始化------(两种方式)

      NSMutableArray * mutableArray = [[NSMutableArray alloc] init];

      NSMutableArray * mutableArray = [NSMutableArray array];   //教我的老师演示时的初始化,两种初始化有没有区别,或者不同,现在先不讨论

    

    //增加元素

      对于可变数组,苹果给我们提供了很多方法,因为新手的原因,我基本也使用了其中的一种      

       [mutableArray addObject:(id)]; //这是mutableArray 对象调用增加元素的一个方法

       例如:[mutableArray addObject:@"EFG"]; //这是在mutableArray 对象中添加了一个NSString 类型的元素,值为@"EFG"

     

    // 删除元素     

      [mutableArray removeAllObjects];  //这个方法是移除 mutableArray 中的所有元素         

      [mutableArray removeLastObject]; //这个方法是移除 mutableArray 的最后一个元素

    

      [mutableArray removeObject:(id)]; //这个方法是移除值为id的元素(这样描述其实是不正确的),id实际存放的应该是地址,但字符串除外

      例如:[mutableArray removeObject:@"abc"]; //这是在mutableArray  对象中删除了一个值为"abc"的元素

 

      [mutableArray removeObjectAtIndex:(NSUInteger)];  //这个方法是移除位置为  NSUInteger 的元素,这个数字实际是删除类似下标为 NSUInteger的元素

      例如:[mutableArray removeObjectAtIndex:3];  //这是删除了第4个元素

 

    //修改元素位置

    [mutableArray exchangeObjectAtIndex:(NSUInteger1) withObjectAtIndex:(NSUInteger2)] //这个方法是将位置  NSUInteger1 的元素和 NSUInteger2 的元素进行交换位置

    例如:[mutableArray exchangeObjectAtIndex:1 withObjectAtIndex:2];//意思是将第2个元素和第3个元素交换(因为NSUInteger是下标)

 

  /*****

  ***数组的遍历 (我所了解的目前有三种方式)

     ****/

  1、枚举器法  (这种方法在遍历过程中不能改变数组的个数以及元素的位置,不然会出错)

      NSEnumerator * enumerator = [mutableArray objectEnumerator];//构造枚举器

      id obj;

      while (obj = [enumerator nextObject]) {

          //obj既为元素

      }

 

  2、快速枚举法  (有的叫做 快速for循环) (这种方法依旧在遍历过程中不能改变数组的个数以及元素的位置,不然会出错)

      for(id obj in mutableArray){

          //obj既为元素

      } //这种方法他们都说是最快的,我也就当作最快的来用

 

   对于枚举器,还有一种叫做逆序枚举器,方法如下  

    NSEnumerator *enumrator = [mutableArray reverseObjectEnumerator];//构造逆序枚举器,用法同枚举器一样,但不一样的是,用逆序枚举器遍历的时 候,以上两种方法可以改变数组的个数以及元素的位置。

 

  3、使用for循环进行遍历 (这种遍历方法可以在循环中改变数组的个数以及元素的位置)

      for (int i = 0; i < [mutableArray count]; i++) {

          id obj = [mutableArray objectAtIndex:i];// obj既为元素

      }

 

posted @ 2015-07-30 17:36  为你前行  阅读(249)  评论(0编辑  收藏  举报