zoukankan      html  css  js  c++  java
  • OC知识梳理-NSArray与NSMutableArray相关知识

    知识普及:

    1、数组中的元素在系统中都会有其默认对应的下标,下标是一个整形的数字,默认从0开始。

    例:NSArray *arr3 = @["345","234","23"];

    则当我们要取出数组中第一个元素时,有  arr3[0]= "345";如果出现我们要取出arr[3]时,程序会报错,因为此时的数组只有3个元素,对应的下标为0、1、2,没有3,这种情况我们称之为越界

    2、在oc中汉字不能被直接打印出来,需要遍历操作;

    3、数组中只能放对象

     

    一、两者特点与区别:

    1、NSArry为静态数组(不可变数组),不能改动数组中的元素;

    2、NSMutableArray为动态数组(可变数组),可变动(增、删、改、换)其中的元素;

    二、两者常用到的方法:

    1、NSArry函数的几种常用方法

    获取

    • -(NSUinteger)count    获取数组的元素个数
    • -(void)objectAtIndex:(NSUinteger)index    获取索引位置(index)的元素
    • -(undesigned)indexofObjext:(id) object   获取一个id类型的元素的位置

    判断

    • -(BOOL) countainsobject:(id)    判断是否包含一个id类型的对象

    循环遍历(for循环、枚举器遍历、快速遍历)

    • 具体方法见下面的实例

    数组排序(调用方法排序、block(代码块)排序、描述法排序)

    • 具体方法见下面的实例

    2、NSMutableArry函数的几种常用方法

         由于NSMutableArry是NSArry的子类,故而NSArry中的方法都可使用,但我们要谨记的是:NSMutableArry是可变数组,具体情况我们还要具体对待。

    添加元素

    • -(void)addObject:(id)object    添加一个id类型的元素
    • -(void)insertObject:(id)object  atIndex:(NSUinteger)index    在索引位置插入一个id类型的元素
    • -(void)addObjectFromArray:(NSArray *)arry    将一个数组的全部元素添加到现有数组的末尾

    删除元素

    • -(void)removeObject:(id)object    移除数组中的特定元素
    • -(void)removeObjects    删除所有元素
    • -(void)removeObjectAtIndex:index    删除索引位置的元素

    改动元素

    • -(void)replaceObjectAtIndex:index  withObject:(id)object     用特定元素替换索引位置的元素
    • -(void)exchangeObjectAtIndex:index1 withObjectAtIndex:index2    交换两个索引位置的元素

    循环遍历(for循环、枚举器遍历、快速遍历)

    • 具体方法见下面的实例

    数组排序(调用方法排序、block(代码块)排序、描述法排序)

    • 具体方法见下面的实例

    三、实例展示

    1、NSArray(不可变数组)

    • 初始化一个数组的三种方法

    法一:初始化一个空数组

    NSArray *arr1 = [NSArray array];

    法二:初始化一个n元素的数组(n>=1):

    NSArray *arr2 = [NSArray arrayWithObjects:@"1",@"zhang san",@"ABXZ", nil];

    注意当n=0时,“Objects”改为“Object”, 数组中没有“,nil”。

    法三:直接给一个数组赋值

    NSArray *arr3 = @[@"zhangsan",@"张三",@"23"];

    注意:此时数组中有汉字,故而不能直接打印,要通过遍历才能将结果正确打印出来,具体操作见下面的程序段。

    • 数组中元素个数

    NSUInteger count=arr3.count;

    NSLog(@"count=%ld",count);

    • 数组中某元素的位置

    unsigned long int i = [arr3 indexOfObject:@"234"];
    NSLog(@"i = %ld",i);

    • 循环遍历

    法一:for循环遍历

    for (int i = 0; i < arr3.count; i++) {
          NSString *str = arr3[i];
          NSLog(@"%@",str);

    }

    法二:枚举器遍历

    • 获取数组所有元素的枚举器
    NSEnumerator *e = [arr1 objectEnumerator];
          NSString *obj;
          while(obj = [e nextObject]){
                NSLog(@"---%@",obj);
          }

    注意:while循环中的“nextObject”在第一次循环时,其指向的是枚举器“e”中的第一个元素,每一次循环回来,它都会自动指向下一个元素,当它指向最后一个元素,并完成此次循环后,他会指向“nil”(空字符),此时循环结束。

    法三:快速遍历

           for (id obj1 in arr1) {
                NSLog(@"obj1 = %@", obj1);
           }

    通过以上三种方法,都可得出以下结果:

    2015-11-07 15:43:03.711 实验[1862:84687] zhangsan
    2015-11-07 15:43:03.712
    实验[1862:84687] 张三
    2015-11-07 15:43:03.712 实验[1862:84687] 1234

    2、NSMutableArry(可变数组)

    初始化一个可变数组对象

    法一:初始化一个空对象

    同NSArray;

    法二:初始化一个容量为n的空对象

    NSMutableArray *arr1 = [NSMutableArray arrayWithCapacity:n];

    注意:这里初始化的容量“n”比为非负整数,表示为创建的数组分配的内存空间。

    法三:初始化一个有多个元素的数组

    同NSArray;

    NSMutableArray *arr2 = [NSMutableArray arrayWithObjects:@"34",@"22",@"35", nil];

    注意:NSArray中的第三种方法在这里不能用,因为NSArray 的第三种方法初始化的数组是不可变的,如果用在可变数组中没有意义。

    • 在数组末尾添加一个元素

    [arr2 addObject:@"23"];

    • 将一个数组中的所有元素添加到现有数组的末尾

    [arr2 addObjectsFromArray:@[@"21",@"82"]];

    • 在索引位置添加元素

    [arr2 insertObject:@"360" atIndex:3];

    注意键入索引时,要保证索引的合理性,不能越界。

    • 移除特定位置的元素

    [arr2 removeObjectAtIndex:2];

    • 替换索引位置的yuansu

    [arr2 replaceObjectAtIndex:1 withObject:@"abc"];

    • 遍历数组中的元素

    for (NSString *s in arr2) {
          [arr1 removeObject:@"1"];
          NSLog(@"arr1=%@",s);
    }

    注意:在为可变数遍历时,不能对其变动(增、删、改、换)。

     

    3、数组的运用

    • copy数组

    当我们在使用NSArray对应给另一个数组进行赋值时,直接赋值会报错,我们可以使用mutableCopy

        NSMutableArray *a1 = [NSMutableArray arrayWithObject:@"1"];
        NSArray *a2 = [NSArray arrayWithObject:@"2"];
        a1 = [a2 mutableCopy];
        a2 = [a1 mutableCopy];
        
        NSLog(@"%@   %@",a1,a2);

    结果为:[2487:199321] (
        2
    )   (
        2
    )

    有次我们不难看出,使用mutableCopy方法,只适用于可变数组NSMutableArray,一旦NSArray初始化完毕,既不可更改。

    • 扩充数组

    我们在网络请求时,往往会用到数组承接数据,但当我们遇到因网速不好/参数错误/借口错误等因素导致获取数据失败时,系统会自动报错。显示的错误信息时:数组无法添加一个空值。

    因此在此种类似的情况下,我们就要在添加对象之前进行判断。

  • 相关阅读:
    ARC管理内存(一)
    懒加载lazyload
    View的封装
    Plist文件与数据解析
    ubuntu16.04 安装python3.6
    ubuntu16.04 安装 wxPython方法
    第三章
    第二章
    协方差的意义
    内存区--Java
  • 原文地址:https://www.cnblogs.com/linzhengbo/p/4950616.html
Copyright © 2011-2022 走看看