OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法。

OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型。

不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素。

创建一个不可变数组对象

//1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号)

NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger",@"honghuang",@"taixu",@"zhili", nil]; //nil不是对象,只是一个标志,告诉编译器数组赋值结束

//2.便利构造器

NSArray *array2 = [NSArray arrayWithObjects:@"zhuba",@"bada",@"zhonger",@"duliu", nil];

打印出的数据以()内容显示,比如:

array1 is (
zhonger,
honghuang,
taixu,
zhili
)

//3.笑笑语法 语法糖,字面量  这是不可变数组的写法。。。

//OC中的数组可以存放不同类型的对象

NSArray *array3 = @[@"yousiyi", @"huangshenme", @"shuishen", @"qiuxiang", @12];

//数组的两个核心方法  count  objectAtIndex:

//count 求数组元素个数

unsigned long count = [array1 count];

NSLog(@"array1count is %lu",count);    //可以打印出元素的个数

//objectAtIndex:通过给定的下标,找到相应的元素

NSString *bada = [array2 objectAtIndex:1];

NSLog(@"bada is %@",bada);

NSString *zhonger = array2[2];  //语法糖表达方式

NSLog(@"zhonger is %@",zhonger);

//遍历array3里面的每一个元素

unsigned long count1 = [array3 count];

for (int i = 0; i < count1; i ++) {

NSLog(@"%@",array3[i]);//语法糖

}

//判断数组中是否包含某个元素

BOOL isTrue = [array2 containsObject:@"zhuba"];

NSLog(@"isTrue is %d",isTrue);

//获取某个元素所在的数组下标

NSUInteger index = [array2 indexOfObjectIdenticalTo:@"bada"];

NSLog(@"index is %lu",index);

//通过数组来实现分割字符串,拼接字符串、

//以空格分隔字符串

NSString *str = @"zhonger m 19 m";

NSArray *resultArray = [str componentsSeparatedByString:@" "];

//以66666拼接字符串

NSArray *rArray = @[@"bada", @"qiuxiang",@"zaiyiqi"];

NSString *str1 = [rArray componentsJoinedByString:@"66666"];

//至于可变数组,在不可变数组的情况下,提供了增删改的操作,让数组功能变得更加多样化

//1.创建一个可变数组

NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:0];

//2.便利构造器

NSMutableArray *mArr1 = [NSMutableArray arrayWithCapacity:0];

//3.可变数组的字面量创建方式

NSMutableArray *mArr2 = [@[@"zhonger", @"dada", @"zhuzhu", @"linlin"]mutableCopy];

//往可变数组里添加元素,addobject

[mArr2 addObject:@"addobject"];

//往可变数组的指定位置插入一个新的元素  insertObject

[mArr2 insertObject:@"charu" atIndex:1];

//移除可变数组中的某一元素

//通过下标

[mArr2 removeObjectAtIndex:4];

NSLog(@"mArr2 is %@",mArr2);

//通过指定内容

[mArr2 removeObject:@"zhuzhu"];

NSLog(@"mArr2 is %@",mArr2);

//删除数组中最后一个元素

[mArr2 removeLastObject];

NSLog(@"mArr2 is %@",mArr2);

//删除数组中所有的元素

//[mArr2 removeAllObjects];

//NSLog(@"mArr2 is %@",mArr2);

//替换可变数组中的元素

[mArr2 replaceObjectAtIndex:0 withObject:@"gou"];

[mArr2 replaceObjectAtIndex:1 withObject:@"taixu"];

NSLog(@"mArr2 is %@", mArr2);

//交换可变数组中两个元素的位置

[mArr2 exchangeObjectAtIndex:0 withObjectAtIndex:1];

NSLog(@"mArr2 is %@", mArr2);

注意:无论是不可变还是可变数组,如果是在MRC环境下,只要加入这个数组中,都是导致引用计数加1,作为三大容量之一,数组存放的是有序的对象,不同于字典的有序,数组可以实现排序。

Objective - C NSArray不可变数组和NSMutableArray可变数组的更多相关文章

  1. Objective-C( Foundation框架 一 数组(NSMutableArray))

    NSMutableArray:可变数组 NSMutableArray是NSArray的子类 创建NSMutableArray数组对象 添加数组元素: // 创建数组 NSMutableArray *a ...

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

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

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

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

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

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

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

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

  6. 窥探Swift之数组安全索引与数组切片

    今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在 ...

  7. OC基础 可变字典与不可变字典的使用

    OC基础 可变字典与不可变字典的使用 1.不可变字典 1.1创建不可变字典 //创建字典 //注意: //1,元素个数是偶数 //2,每两个元素是一个键值对 //3,值在前,键在后 NSDiction ...

  8. [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组

    1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...

  9. JAVA的可变类与不可变类

    转自: http://www.blogjava.net/hilor/articles/150610.html 可变类和不可变类(Mutable and Immutable Objects)的初步定义: ...

随机推荐

  1. qsort函数、sort函数【转】

    http://blog.163.com/yuhua_kui/blog/static/9679964420142195442766/ 先说明一下:qsort和sort,只能对连续内存的数据进行排序,像链 ...

  2. php自学提升进阶路线

    为了自己对php的系统全面深入的掌握,我通过个人经验,以及搜索网上高手经验,汇总了一份php自我学习路线规划,包括实战演练.学习建议.高手进阶.常见问题和测试总结五块.算是一个系统的学习计划和目标吧. ...

  3. linux学习笔记--vi与vim编辑器

    vi编辑器全名为Visual Interface,即为可视化接口,类似于Windows中的记事本 vim相当于是vi的一个升级版本,包含vi的一切操作命令,vim相对于vi做了哪些提升: 1.vim支 ...

  4. 时时获得高德地图坐标 http://lbs.amap.com/console/show/picker

    1.高德地图标注 在做开发时,或者做高德地图标注的时候,要用到高德地图的坐标,时时获得高德地图坐标 http://lbs.amap.com/console/show/picker 老的高德地图标注地址 ...

  5. MyBatis学习(二)、SQL语句映射文件(1)resultMap

    二.SQL语句映射文件(1)resultMap SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyB ...

  6. 延时函数出错,volatile一例

    莫名其妙的错误.使用Systick做的延时. 初始化是这样的: //SysTick配置 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); if ...

  7. CDC和HDC的区别与转换

    CDC和HDC的区别与转换 一.区别与联系HDC是句柄:CDC是MFC封装的Windows   设备相关的一个类:CClientDC是CDC的衍生类,产生对应于Windows客户区的对象HDC是WIN ...

  8. SVN的感叹号

    黄色感叹号(有冲突):--这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人 ...

  9. php 升级排错

    lnmp 环境下,升级php版本,模块都加载完成,数据库,nginx 设置都完好,但php 只能用ip 访问数据库,不能用localhost,处理要设置php.ini 的三个mysqld.sock,还 ...

  10. C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...