【转】不可变数组NSArray与可变数组NSMutableArray
原文网址:http://www.jianshu.com/p/1ad327f56d1d
不可变数组NSArray
//创建一个空数组
NSArray *array = [NSArray array];
//这样创建是没有意义的.
//创建只有一个元素的数组
NSArray *array1 = [NSArray arrayWithArray:@"a"];
NSArray *array2 = [NSArray arrayWithObject:@"b"];
//使用便利构造器创建有多个元素数组
NSArray *array3 = [NSArray arrayWithObjects:@"Hola",@"Bonjour",@"Guten",@"Tag", nil]; //注意最后有nil
//创建数组,有多个元素 使用对象方法
NSArray *array4 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", @"4",nil];
//用一个数组创建另一个数组
NSArray *array5 = [NSArray arrayWithArray:array3];
//在控制台打印数组中的所有对象 使用数组名
NSLog(@"%@",array5);
//在控制台打印数组中的某个对象 使用数组名 + 下标法
NSLog(@"%@",array5[0]);
一些常用用法:
NSArray *array = [NSArray arrayWithObjects:@"Hola",@"Guten",@"Tag",@"Bonjour", nil];
//1.获取数组的元素个数 使用count
NSLog(@"%ld",[array count]);
//2.根据下标获取下标对应的对象
NSLog(@"%@",[array objectAtIndex:2]); // 此处[]不能用.代替
//3.通过元素找下标
NSUInteger r = [array indexOfObject:@"three"];
NSLog(@"%ld",r);
//4.判断数组中是否包含了某个元素
BOOL r1 = [array containsObject:@"one"];
if (r1) {
NSLog(@"包含这个元素!");
}else{
NSLog(@"没找着!");
}
简化的创建方式 (语法糖):
NSArray *array = @[@"one",@"two",@"three",@"four"];
简化的访问方式(通过元素下标来访问)
NSString *str = array[2];
NSLog(@"%@",str);
数组遍历:
//第一种方式: 普通遍历 -- 通过下表访问
for (int i = 0; i < array.count; i++) {
NSLog(@"%@",array[i]);
}
//第二种方式: 快速枚举法--for循环的增强版
for (NSString *obj in array) {
NSLog(@"%@",obj);
}
//第三种方式: 使用block进行遍历
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (idx == 2) { //idx是下标
*stop = YES;
}else{
NSLog(@"下标为:%ld 对象为%@",idx,obj);
}
}];
可变数组NSMutableArray
可变数组NSMutableArray 继承于 不可变数组NSArray
//1.创建一个空数组
NSMutableArray *array =[NSMutableArray array];
//2.维数组追加元素
[array addObject:@1];
//3.创建数组,添加多个元素
NSMutableArray *array2 = [NSMutableArray arrayWithCapacity:5];
//添加5个元素
[array2 addObject:@1];
array2[1] = @2;
array2[2] = @3;
array2[3] = @4;
array2[4] = @5;
//输出数组
NSLog(@"%@",array2);
可变数组有而不可变数组没有的一些操作:
//插入 insert
[array2 insertObject:@6 atIndex:0];
NSLog(@"%@",array2);
//替换 replace
[array2 replaceObjectAtIndex:0 withObject:@0];
NSLog(@"%@",array2);
//删除 remove
[array2 removeLastObject];
NSLog(@"%@",array2);
//是否包含 contain
BOOL r = [array2 containsObject:@2]; //此方法有返回值
if (r) {
NSLog(@"包含!");
} else {
NSLog(@"不包含!");
}
//交换元素 exchange
[array2 exchangeObjectAtIndex:0 withObjectAtIndex:2];
NSLog(@"%@",array2);
一个典型的错误用法:
// NSMutableArray *array =@[@1,@2,@3,@4,@5];
// [array addObject:@"hello"];
// NSLog(@"%@",array3);
注: 语法糖是为不可变对象设立的,如果创建可变对象时,使用语法糖,会报黄,创建之后,再为此空间添加对象,程序会抛出异常,因为在运行时,默认是不可变的数组.
原文链接:http://www.jianshu.com/p/1ad327f56d1d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
【转】不可变数组NSArray与可变数组NSMutableArray的更多相关文章
- OC基础 可变数组与不可变数组的使用
OC基础 可变数组与不可变数组的使用 1.不可变数组 1.1不可变数组的创建 //实例方法 NSArray *array = [[NSArray alloc] initWithObjects:&quo ...
- Chapter5_初始化与清理_数组初始化与可变参数列表
一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...
- scala (4) 可变数组和不可变数组
在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下) 不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的 可变数组指的是长度和数组中角标对 ...
- Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...
- iOS之利用runtime,避免可变数组和可变字典为nil或者数组越界导致的崩溃
NSArray.NSMutableArray.NSDictionary.NSMutableDictionary.是我们的在iOS开发中非常常用的类.当然,在享受这些类的便利的同时,它们也给我们带来一些 ...
- Foundation框架—— 数组 (NSArray NSMutableArray )
基础知识回顾 1.在给可变数组添加元素时,要保证该数组已被初始化 2.在遍历可变数组时,不能对其进行增删改 3.NSMutableArray继承自NSArray,几乎拥有NSArray的一切方法. 4 ...
- 15.Object-C--浅谈Foundation框架OC数组NSArray与NSMutableArray
昨天总结了一下NSString与NSMutableString,今天我在这里总结一下NSArray与NSMutableArray. NSArray数组是:不可变数组. nil 是数组元素结束的标记.O ...
- Object-C,数组NSArray
晚上回来,写了2个iOS应用程序. 就是在界面中,展示标签.一种是手动构造界面,然后绑定事件.另外一种是,使用自带的界面作为容器,但是手动向里面放其它界面元素. 书中的观点是,使用图形化界面,构造界面 ...
- IOS数组NSArray与NSMutableArray知识点
此文是对数组NSArray与NSMutableArray知识点的总结,主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合: a:Foundati ...
随机推荐
- JS面向(基于)对象编程--构造方法(函数)
构造函数(方法)介绍 什么是构造函数呢?在回答这个问题之前,我们来看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接 ...
- C#产生不重复的随机数并生成随机文件名
本文转自:http://blog.ciznx.com/post/csharprandomnumberandrandomfilename.aspx 在项目中会遇到需要批量生成文件的时候,比如 asp.n ...
- http://www.cnblogs.com/TankXiao/p/4018219.html
http://www.cnblogs.com/TankXiao/p/4018219.html
- 李洪强iOS开发之添加手势
李洪强iOS开发之添加手势 02 - 添加手势
- QApplication::alert 如果窗口不是活动窗口,则会向窗口显示一个警告(非常好用,效果就和TeamViewer一样)
void QApplication::alert(QWidget * widget, int msec = 0)如果窗口不是活动窗口,则会向窗口显示一个警告.警报会显示msec 毫秒.如果毫秒为零,闪 ...
- 关于SecureCRT链接虚拟机和开发板的问题
SecureCRT链接虚拟机后会出现汉字显示乱码问题,一下是解决方案. 点击options 再点击session options 会出现 选择: 主要改两个地方: normal 和 改完之后就可以顺 ...
- java Process的waitFor()
java Process的waitFor() 在编写Java程序时,有时候我们需要调用其他的诸如exe,shell这样的程序或脚本.在Java中提供了两种方法来启动其他程序: (1) 使用Runtim ...
- 120条Photoshop新手必看技巧
Photoshop越来越强大了!试图掌控它的全部特性是不现实的(更何况有那么多隐藏的功能!),那么我们不妨收藏一下大神们总结的这120个PS技巧,偶尔翻看一下,让自己的设计更强大更高效! 这120款技 ...
- WebService另一种轻量级实现—Hessian 学习笔记
最近和同事聊天,得知他们在使用一种叫做Hessian的WebService实现方式实现远 程方法调用,是轻量级的,不依赖JavaEE容器,同时也是二进制数据格式传输,效率比SOAP的XML方式要高.感 ...
- MDX语法
https://msdn.microsoft.com/zh-cn/library/ms145506.aspx