A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#pragma mark -01-NSArray的使用

1. NSArray.

    1). 是Foundation框架中的1个类. 是OC中的数组.

        NSArray对象是1个数组对象,存储多个数据的.

    2). C语言的数组的特点

        a. 元素类型相同.

        b. 长度固定.

        c. 每1个元素是连续的.

   

    3). OC数组的特点

        1).NSArray数组中只能存储OC对象. 非OC对象无法存储.

        2).长度固定. 一旦创建.数组中的元素无法新增和删除.甚至元素的值都无法更改.

        3).NSArray数组中的每1个元素仍然是连续的.仍然有下标/索引.

        4).NSArray数组的元素的类型是id类型的.

2. NSArray数组的创建.

    1). 它是1个类 要创建对象才可以使用.

         NSArray *arr1 = [NSArray new];

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

         NSArray *arr3 = [NSArray array];

        这么创建出来的数组的元素的个数是0个.

        这么创建没有意义.因为NSArray数组无法新增元素.

    2). 第二种创建NSArray数组的方式.

        NSArray *arr1 = [NSArray arrayWithObject:@"jack"];

        创建了1个长度为1的数组,这个元素的值是@"jack"

   

        这样写是没有意义的.

    3). 最常用的方式:

        + (instancetype)arrayWithObjects:(ObjectType)firstObj, ...

        

        NSArray *arr1 = [NSArray arrayWithObjects:@"jack",@"rose",@"lily",@"lelei",nil];

        创建1个NSArray数组.并指定数组的元素的值.将每1个元素的值挨个挨个的写好.

        当所有的元素写完毕之后,记住后面跟1个nil

        这个时候nil代表结束. 代表元素在这个地方结束

        再次强调:

        1). 当我们将所有的元素写完以后,最后一定要跟1个nil

        2). 如果你把nil放在前面,就会认为元素到此结束.

        3). NSArray数组中只能存储OC对象.非OC对象是无法存储的.

            可以存储任意的OC对象,但是如果指针的值是nil就会认为结束.

    4).最最常用的创建NSArray数组的方式.

       创建NSArray对象的简写方式.

       NSArray *arr = @[@"jack",@"rose",@"lily"];

       记住:这种写法,后面不需要加nil

       NSArray数组中无法存储nil

       nil 就是 NULL 就是 0 就是1个基本数据类型.


3. NSArray数组的使用

    1). 使用%@就可以直接输出NSArray数组中的元素的值.

        需要注意的时候,如果存储的是中文字符串,输出的就是这个中文字符串对应的unicode编码.

        用%@打印整个NSArray数组对象的时候,如果元素是字符串的中文 就会有乱码.

    2). NSArray数组不能存储nil


4. 如何取出存储在NSArray数组中的数据.

    1). 使用中括弧写下标来取指定元素的值.

         NSArray *arr = @[@"jack",@"rose",@"lily",@"jim",@"lilei",@"中文"];

     

         NSLog(@"arr[1] = %@",arr[5]);

         需要注意的时候,如果使用下标取出来的元素是1个中文字符串,是可以正常输出的.

    2). 调用数组对象的方法也可以取出指定下标元素的值.

        - (ObjectType)objectAtIndex:(NSUInteger)index;

        ObjectTyoe ---- id

     

5. NSArray数组对象的其他的常用方法.

    1). 得到数组的长度. 得到数组的元素的个数.

        @property (readonly) NSUInteger count;

    2). 获取数组中指定下标元素的值.

        - (ObjectType)objectAtIndex:(NSUInteger)index;

        如果下标越界,运行必报错.

    3). 判断数组中是否包含指定的元素.

        - (BOOL)containsObject:(ObjectType)anObject;

    4). 取到数组中的首个元素.

        @property (nullable, nonatomic, readonly) ObjectType firstObject

        如果使用下标0去取,如果数组的长度为0 那么就会报错.

        如果使用firstObject取,就返回nil 不会报错.

    5). 取到数组中的末尾元素.

        @property (nullable, nonatomic, readonly) ObjectType lastObject;

    6). 查找指定的元素在数组中第1次出现的下标.

        - (NSUInteger)indexOfObject:(ObjectType)anObject;

        如果没有找到,就返回NSNotFound.就是NSUInteger的最大值.

6. 遍历NSArray数组

    1). 使用for循环, 将每1个元素的下标遍历出来.通过下标取值.

         NSArray *arr = @[@"jack",@"rose",@"lili",@"lilei",@"中文"];

         

         for(int i = 0; i < arr.count;i++)

         {

            NSLog(@"%@",arr);

            NSLog(@"%@",[arr objectAtIndex:i]);

         }

    2). 使用增强for循环来遍历NSArray数组.

        a. 语法格式

        for(元素类型 变量名 in 数组名)

        {

            变量名的值就是数组中每1个元素的值.

        }

        迭代变量.

        b. 执行原理.

        将数组中第0个元素的值赋值给迭代变量. 然后执行循环体.

        将数组中第1个元素的值赋值给迭代变量. 然后执行循环体.

        将数组中第2个元素的值赋值给迭代变量. 然后执行循环体.

        将数组中第4个元素的值赋值给迭代变量. 然后执行循环体.

        .....

        将数组中最后1个元素的值赋值给迭代变量. 然后执行循环体.

        自动结束循环.

        c. 如何使用增强for循环来遍历NSArray数组.

        -> 迭代变量的类型写数组中真真存储的数据的类型.

        -> 迭代变量的名称可以随便写 因为它仅仅是1个变量.

        -> in是固定的.

        -> 要遍历那1个数组 就把数组写在in后面就可以了.

        -> 在循环体中,迭代变量的值就是数组中每一个元素的值.

        如果数组中存储的数据的类型不一致.迭代变量建议使用id.

     3). 使用block来遍历NSArray数组.

         - (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block

         这个方法的作用: 遍历数组中的每1个元素.

         NSArray *arr = @[@"jack",@"rose",@"lili",@"lilei",@"中文"];

         

         [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop){

             //obj: 遍历出来的这个元素的值.

             //idx: 遍历出来的这个元素的下标.

             NSLog(@"arr[%lu] = %@",idx,obj);

             //如果你想要停止遍历,就给这个stop指针指向的变量赋值为YES;

             if(idx == 2)

             {

                *stop = YES;

             }

         }];

  7. NSArray与字符串相关的方法.

   

    - (NSString *)componentsJoinedByString:(NSString *)separator;

    使用指定的分隔符将数组中的每一个元素拼接成1个新的字符串.

    - (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;

    以指定的字符串分隔




#pragma mark -02-NSMutableArray的使用


1. NSMuatableArray

    是Foundation框架中的一个类.它是NSArray的子类.

    所以.NSMuatableArray和NSArray一样,也是1个数组.

    并且NSArray具备的功能,NSMuatableArray肯定都有.

    NSMutableArray相对于父类做的扩展: 这个数组中的元素可以新增和删除.其他的用法和NSArray一样

    NSArray叫做不可变数组.

    NSMuatableArray叫做可变数组.

2.  NSMuatableArray的创建.

     NSMutableArray *arr1 = [NSMutableArray new];

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

     NSMutableArray *arr3 = [NSMutableArray array];

     这种方式创建出来的数组的长度为0.但是这个是有意义.

     因为这个数组的元素可以动态的新增和删除.

     + (instancetype)arrayWithObjects:(ObjectType)firstObj, ...

     这样创建也是可以的.但是一样 最后给1个nil

    特别注意这样是不行的

    NSMutableArray *arr4 = @[@"jack",@"rose",@"lily"];

    @[@"jack",@"rose",@"lily"];这是创建NSArray的简写方式 这个是1个NSArray对象.

3. 为NSMutableArray数组新增元素.

    1).NSMutableArray数组刚创建出来的时候,这个数组的长度是0.

       每新增1个元素,才动态的为这个数组新增1个元素.

   

    2). 新增元素的方法.

        - (void)addObject:(ObjectType)anObject;

        将数组中的每1个元素取出来新增到当前这个可变数组中.

        - (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;

4. 删除元素,

    1). 根据下标来删除数组中的元素.

        - (void)removeObjectAtIndex:(NSUInteger)index;

    2). 删除数组中的最后1个元素

   

        - (void)removeLastObject;

    3). 清空数组中的所有的元素.

        - (void)removeAllObjects;

    4). 删除数组中指定的元素.

        - (void)removeObject:(ObjectType)anObject;

        所有删除.

    5). 删除指定范围的元素

        - (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;

    6). 元素的插入:

        - (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马