原文网址:http://www.jianshu.com/p/1ad327f56d1d

不可变数组NSArray

  1. //创建一个空数组
  2. NSArray *array = [NSArray array];
  3. //这样创建是没有意义的.
  4. //创建只有一个元素的数组
  5. NSArray *array1 = [NSArray arrayWithArray:@"a"];
  6. NSArray *array2 = [NSArray arrayWithObject:@"b"];
  7. //使用便利构造器创建有多个元素数组
  8. NSArray *array3 = [NSArray arrayWithObjects:@"Hola",@"Bonjour",@"Guten",@"Tag", nil]; //注意最后有nil
  9. //创建数组,有多个元素 使用对象方法
  10. NSArray *array4 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", @"4",nil];
  11. //用一个数组创建另一个数组
  12. NSArray *array5 = [NSArray arrayWithArray:array3];
  13. //在控制台打印数组中的所有对象 使用数组名
  14. NSLog(@"%@",array5);
  15. //在控制台打印数组中的某个对象 使用数组名 + 下标法
  16. NSLog(@"%@",array5[0]);

一些常用用法:

  1. NSArray *array = [NSArray arrayWithObjects:@"Hola",@"Guten",@"Tag",@"Bonjour", nil];
  2. //1.获取数组的元素个数 使用count
  3. NSLog(@"%ld",[array count]);
  4. //2.根据下标获取下标对应的对象
  5. NSLog(@"%@",[array objectAtIndex:2]); // 此处[]不能用.代替
  6. //3.通过元素找下标
  7. NSUInteger r = [array indexOfObject:@"three"];
  8. NSLog(@"%ld",r);
  9. //4.判断数组中是否包含了某个元素
  10. BOOL r1 = [array containsObject:@"one"];
  11. if (r1) {
  12. NSLog(@"包含这个元素!");
  13. }else{
  14. NSLog(@"没找着!");
  15. }

简化的创建方式 (语法糖):

  1. NSArray *array = @[@"one",@"two",@"three",@"four"];

简化的访问方式(通过元素下标来访问)

  1. NSString *str = array[2];
  2. NSLog(@"%@",str);

数组遍历:

  1. //第一种方式: 普通遍历 -- 通过下表访问
  2. for (int i = 0; i < array.count; i++) {
  3. NSLog(@"%@",array[i]);
  4. }
  5. //第二种方式: 快速枚举法--for循环的增强版
  6. for (NSString *obj in array) {
  7. NSLog(@"%@",obj);
  8. }
  9. //第三种方式: 使用block进行遍历
  10. [array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  11. if (idx == 2) { //idx是下标
  12. *stop = YES;
  13. }else{
  14. NSLog(@"下标为:%ld 对象为%@",idx,obj);
  15. }
  16. }];

可变数组NSMutableArray

可变数组NSMutableArray 继承于 不可变数组NSArray

  1. //1.创建一个空数组
  2. NSMutableArray *array =[NSMutableArray array];
  3. //2.维数组追加元素
  4. [array addObject:@1];
  5. //3.创建数组,添加多个元素
  6. NSMutableArray *array2 = [NSMutableArray arrayWithCapacity:5];
  7. //添加5个元素
  8. [array2 addObject:@1];
  9. array2[1] = @2;
  10. array2[2] = @3;
  11. array2[3] = @4;
  12. array2[4] = @5;
  13. //输出数组
  14. NSLog(@"%@",array2);

可变数组有而不可变数组没有的一些操作:

  1. //插入 insert
  2. [array2 insertObject:@6 atIndex:0];
  3. NSLog(@"%@",array2);
  4. //替换 replace
  5. [array2 replaceObjectAtIndex:0 withObject:@0];
  6. NSLog(@"%@",array2);
  7. //删除 remove
  8. [array2 removeLastObject];
  9. NSLog(@"%@",array2);
  10. //是否包含 contain
  11. BOOL r = [array2 containsObject:@2]; //此方法有返回值
  12. if (r) {
  13. NSLog(@"包含!");
  14. } else {
  15. NSLog(@"不包含!");
  16. }
  17. //交换元素 exchange
  18. [array2 exchangeObjectAtIndex:0 withObjectAtIndex:2];
  19. NSLog(@"%@",array2);

一个典型的错误用法:

  1. // NSMutableArray *array =@[@1,@2,@3,@4,@5];
  2. // [array addObject:@"hello"];
  3. // NSLog(@"%@",array3);

注: 语法糖是为不可变对象设立的,如果创建可变对象时,使用语法糖,会报黄,创建之后,再为此空间添加对象,程序会抛出异常,因为在运行时,默认是不可变的数组.

文/请叫我大圣(简书作者)
原文链接:http://www.jianshu.com/p/1ad327f56d1d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

【转】不可变数组NSArray与可变数组NSMutableArray的更多相关文章

  1. OC基础 可变数组与不可变数组的使用

    OC基础 可变数组与不可变数组的使用 1.不可变数组 1.1不可变数组的创建 //实例方法 NSArray *array = [[NSArray alloc] initWithObjects:&quo ...

  2. Chapter5_初始化与清理_数组初始化与可变参数列表

    一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...

  3. scala (4) 可变数组和不可变数组

    在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下) 不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的 可变数组指的是长度和数组中角标对 ...

  4. Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组

    类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...

  5. iOS之利用runtime,避免可变数组和可变字典为nil或者数组越界导致的崩溃

    NSArray.NSMutableArray.NSDictionary.NSMutableDictionary.是我们的在iOS开发中非常常用的类.当然,在享受这些类的便利的同时,它们也给我们带来一些 ...

  6. Foundation框架—— 数组 (NSArray NSMutableArray )

    基础知识回顾 1.在给可变数组添加元素时,要保证该数组已被初始化 2.在遍历可变数组时,不能对其进行增删改 3.NSMutableArray继承自NSArray,几乎拥有NSArray的一切方法. 4 ...

  7. 15.Object-C--浅谈Foundation框架OC数组NSArray与NSMutableArray

    昨天总结了一下NSString与NSMutableString,今天我在这里总结一下NSArray与NSMutableArray. NSArray数组是:不可变数组. nil 是数组元素结束的标记.O ...

  8. Object-C,数组NSArray

    晚上回来,写了2个iOS应用程序. 就是在界面中,展示标签.一种是手动构造界面,然后绑定事件.另外一种是,使用自带的界面作为容器,但是手动向里面放其它界面元素. 书中的观点是,使用图形化界面,构造界面 ...

  9. IOS数组NSArray与NSMutableArray知识点

    此文是对数组NSArray与NSMutableArray知识点的总结,主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合: a:Foundati ...

随机推荐

  1. Windows 7,64位机器上安装DB2 7.2+FP7

    1.要想在Windows 7,64位机器上安装DB2 7.2+FP7,注意:1)拷贝所有安装文件到本地2)设置setup.exe文件兼容windows 20003)使得users用户勾选“完全控制”权 ...

  2. poj 3662(经典最短路)

    题目链接:http://poj.org/problem?id=3662 思路:这题较多的有两种做法: 方法1:二分枚举最大边长limit,如果图中的边大于limit,则将图中的边当作1,表示免费使用一 ...

  3. Linux:chmod -R 777 * 是什么意思?

    首先,chmod命令是linux上用于改变权限的命令,-R 是递归遍历子目录,因为你要操作的文件使用的*通配符.777,第一个7代表文件所属者的权限,第二个7代表文件所属者所在组的权限,第三个7代表其 ...

  4. React-非dom属性-dangerouslySetInnerHTML标签

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  5. MyBatis笔记——Mapper动态代理

    前提概要 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mappe ...

  6. PHPStorm IDE 快捷键(MAC)

    ⌘——Command ⌃ ——Control ⌥——Option/Alt ⇧——Shift ⇪——Caps Lock fn——功能键就是fn 编辑 Command+alt+T 用 (if..else, ...

  7. Objective-C:三种文件导入的方式以及atomic和nonatomic的区别

    一.三种文件导入的方式比较:   类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...

  8. 常用WinPE

    微PE工具箱:http://www.wepe.com.cn/ 绝对PE工具箱:http://dl.pconline.com.cn/download/64736.html 通用PE工具箱:http:// ...

  9. CF 314C Sereja and Subsequences(树状数组)

    题目链接:http://codeforces.com/problemset/problem/314/C 题意:给定一个数列a.(1)写出a的不同的所有非下降子列:(2)定义某个子列的f值为数列中各个数 ...

  10. Oracle Report : REP-1219

    +---------------------------------------------------------------------------+ 总帐管理系统: Version : 12.0 ...