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类的一个子类。spa

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

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

 

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

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

 

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

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

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

      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是下标)

 

  /*****

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

     ****/

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

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

      id obj;

      while (obj = [enumerator nextObject]) {

          //obj既为元素

      }

 

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

      for(id obj in mutableArray){

          //obj既为元素

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

 

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

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

 

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

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

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

      }

相关文章
相关标签/搜索