zoukankan      html  css  js  c++  java
  • iOS开发-OC语言 (四)数组

    知识点

    1.NSArray

    2.NSMutableArray 

    1.数组的基本用法;

    2.数组的遍历

    3.数组排序

    ===========   NSArray  不可变数组  =================

    1、OC数组和c数组的区别

    C语言的数组:

    相同类型变量的有序结合。 类型:可以是简答数据类型、构造数据类型

    int     a[10];

    int   *b[10];

      1)NSArray是一个对象,是任意类型对象地址的集合

    不能存放简单的数据类型(int, float, NSInteger…)

    除非通过一些手段把简单数据类型变成对象。

      2)C数组可以保存任意类型的数据

      3)NSArray下标越界不会有警告,但是运行会直接报错

    2、如何创建一个空数组

      NSArray *array = [[NSArray alloc] init];

            array = [NSArray array];

        3. 通过指定对象创建数组

         //只有一个元素

            array = [NSArray arrayWithObject:@"aaa"];

            //有n个元素

            array = [NSArray arrayWithObjects:@"1111",@"2222",@"333", nil];

         4.通过指定数组创建数组(两个数组内容的一样)

    [NSArray arrayWithArray:数组];

         5.通过简单的方式创建数组

        array = @[];//空数组

            array = @[@"111",@"222",@"333"];//3个元素

             

         6.把数组中所有的元素转化为字符串

        [array componentsJoinedByString:@“两个元素之间添加的字符串”];

        7.获取数组元素个数

       [array count]

        8.通过索引获取相应的元素(下标要小于数组的count)

       [array objectAtIndex:下标];

     简单取值:array[下标]

         9.通过对象获取在数组中的索引(通过元素获取下标)

        [array indexOfObject:要找的元素]

        10.取出数组的最后一个元素或者第一个元素

               //取第一个元素

            [array firstObject];

            //取最后一个

            [array lastObject];

        11.判断数组中数组包含某个元素

       [array containsObject:要查找的对象]

        12.如何取出数组中的一部分元素

    //索引的集合,保存索引的,NSIndexSet是一个集合类(索引的集合),但是集合里面不能有重复索引

    //只初始化一个索引
    
    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:2];
    
    
    //下标为1,长度为2
    
    NSRange range = NSMakeRange(0, 3);
    
    //构造一个范围的索引
    
    indexSet = [NSIndexSet indexSetWithIndexesInRange:range];
    
     
    [array objectsAtIndexes:indexSet]

       13.判断NSArray中存储的对象是否为指定类型的对象

                     /*

             [A isKindOfClass:B],判断A类是否是B的子类或者本类。

             [A isMemberOfClass:B],判断A类是否是B类(不包括子类)

             */

        

       14.判断两个数组内容是否相同(与顺序有关)

        NSArray *arr1 = @[@"111",@"222",@"333"];

            NSArray *arr2 = @[@"111",@"333",@"222"];

            

            if ([arr1 isEqualToArray:arr2])

            {

                NSLog(@"内容完全相等");

            }

            else

            {

                NSLog(@"内容不完全相等");

            }

        15.把数组写入文件中(数组里面是:NSString,int,float,double......)

       [array writeToFile:path atomically:YES]

       16.从文件中读取数组

      [NSArray arrayWithContentsOfFile:path]

       17.基本类型的包装类

      NSNumber

    //把int类型包装成对象

     numberWithInt

     18.截取数组中指定范围的元素

    [array subarrayWithRange:要截取的范围]

    =============  NSArray数组的遍历 ===========

       1.通过下标遍历数组

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

    {

           NSLog(@"%@",array[i]);

    }

       2、NSEnumerator  枚举器

            1)objectEnumerator消息

        作用:正序输出所有元素

           NSEnumerator *enumerator = [array objectEnumerator];

            2)reverseObjectEnumerator消息

        作用:逆序输出所有元素

           enumerator = [array reverseObjectEnumerator];

        

       //取下一个元素

        [enumerator nextObject]

       3.快速枚举法(for in)

          for (类型 *变量 in 数组)

      4.block方法遍历

    =========     NSMutableArray可变数组    =============

        1.思考:为什么需要有NSMutableArray

    2.NSMutableArray的作用

            

    3.如何创建一个NSMutableArray

              1)创建空数组

            

               <1>NSMutableArray *array = [[NSMutableArray alloc] init];

    <2>array = [NSMutableArray array];

                2)创建有对象的数组

                   《1》初始化只能有一个对象

                  NSMutableArray arrayWithObject:@"111"];

           《2》初始化只能有多个对象

    [NSMutableArray arrayWithObjects:@"1111",@"222",@"333",@"4444", nil];

           [[NSMutableArray alloc] initWithObjects:<#(id), ...#>, nil];

                   

      

        4.可变数组添加元素

            1)向可变数组里面添加元素(在最后添加)

           [array addObject:元素];

            2)如何向可变数组中插入一个元素

       

             /*

             添加一个元素

             */

    //在下标为0的位置添加333

           [array insertObject:@"333" atIndex:0];

              

             3)如何向可变数组中插入多个元素

           

    /*添加多个元素*/
    
    //要添加的元素
    
    NSArray *insertArray = @[@"444",@"555"];
    
    //要添加的索引
    
    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [insertArray count])];
    
            
    /*注意:要添加元素数组的个数等于索引集合的个数,否则crash*/
    
    [array insertObjects:insertArray atIndexes:indexSet];

      5.根据数组下标取值

       [array objectAtIndex:下标];

      6、如何删除元素

          1)删除指定索引的元素

    [array removeObjectAtIndex:下标];

        2) 删除最后一个元素

    [array removeLastObject];

        3)根据指定对象来删除元素

    [array removeObject:对象];

        4)删除所有元素

    [array removeAllObjects];

    5)一次性删除所有指定下标的元素

              [array removeObjectsAtIndexes:索引集合];

       

    6) 删除指定范围内的元素

    [array removeObjectsInRange:<#(NSRange)#>];

    6.替换元素

    //根据下标替换元素
    
    [array replaceObjectAtIndex:0 withObject:@"xiaoming"];
    
    //根据下标集合替换元素(多个元素替换)
    
    [array replaceObjectsAtIndexes:<#(NSIndexSet *)#> withObjects:<#(NSArray *)#>];
    
    //当前指定范围的下标替换为指定数组中的元素
    
    [array replaceObjectsInRange:<#(NSRange)#> withObjectsFromArray:<#(NSArray *)#>];

    7.交换两个元素

     /*下标与下标进行交换*/

     [array exchangeObjectAtIndex:交换的下标 withObjectAtIndex:交换的下标];

    ========   数组排序 ============

    8、数组排序

         1)数组排序方法

        sortedArrayXXX函数

    作用:通过返回值将排序结果告诉用户,{不会修改数组中的元素}

    适用于不能修改的数组

        sortUsingXXX函数

          作用:直接对数组内的元素进行排序,{最后结果保存在要排序的数组中}

    适用于可被修改的数组

      2)使用block排序

        什么是block:类似于c语言中的函数指针

        block的好处:可以访问函数中的局部变量

        !!!定义一个block语法!!!

        block如何修改函数中的局部变量

    __block关键字,是block语法特有的关键字  相当于将变量变成全局变量

     其它说明:

        函数指针是指向函数的指针变量,即本质是一个指针变量。

       int (*f) (int x); /* 声明一个函数指针 */

       f=func; /* 将func函数的首地址赋给指针f */

     指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:

     类型说明符 (*函数名)(参数)

    3) NSSortDescriptor高级排序

    ====== 其他 ==============

       selector选择器使用

      1.SEL数据类型

      1)什么是

        Objective-C在SEL编译的时候,会根据方法的名字(包括参数序列),

        生成一个用 来区分这个方法的唯一的一个ID,这个ID就是SEL类型的

    还可以这样理解:

                         SEL就是对方法的一种包装。包装的SEL类型数据它对应相应的方法地址,找到方法地址就可以调用方法。在内存中每个类的方法都存储在类对象中,每个方法都有一个与之对应的SEL类型的数据,根据一个SEL数据就可以找到对应的方法地址,进而调用方法。

    方法的存储位置:

    • 在内存中每个类的方法都存储在类对象中
    • 每个方法都有一个与之对应的SEL类型的数据
    • 根据一个SEL数据就可以找到对应的方法地址,进而调用方法

      2)作用:

    从效率的角度上来说,执行的时候不是通过方法名字而是方法ID也就是一个整数来查找方法,

           由于整数的查找和匹配比字符串要快得多,所以这样可以在某种程度上提高执行的效率

      并且增强程序的灵活性

      3)使用方法

    通过@selector方法获取

    SEL s1 = @selector(compare:);

    通过NSSelectorFromString将一个字符串转换为一个SEL类型

    SEL s2 = NSSelectorFromString(@"compare:");

    2.performSelector

      1)作用:执行SEL

      2)使用@selector排序

        SEL 是oc特有的类型  compare:   @selector(compare:)

             一个方法名对应一个编号

             只要方法名相同,那么它的SEL值就相同

             ios会将方法名(函数名)转化为一个唯一编号  编号就是SEL类型

             系统通过识别SEL 去寻找对应的方法名

             @selector :方法选择器

             @selector(xxx) xxx就是方法名        

  • 相关阅读:
    shell脚本程序练习
    02、重定向和管道符
    01、bash的基本特性
    python--03day
    python--02day
    python--01day
    Django之Form
    Django之ajax
    csrf的中间件
    Django之中间件
  • 原文地址:https://www.cnblogs.com/fcug/p/6279596.html
Copyright © 2011-2022 走看看