【转】不可变数组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 ...
随机推荐
- Windows 7,64位机器上安装DB2 7.2+FP7
1.要想在Windows 7,64位机器上安装DB2 7.2+FP7,注意:1)拷贝所有安装文件到本地2)设置setup.exe文件兼容windows 20003)使得users用户勾选“完全控制”权 ...
- poj 3662(经典最短路)
题目链接:http://poj.org/problem?id=3662 思路:这题较多的有两种做法: 方法1:二分枚举最大边长limit,如果图中的边大于limit,则将图中的边当作1,表示免费使用一 ...
- Linux:chmod -R 777 * 是什么意思?
首先,chmod命令是linux上用于改变权限的命令,-R 是递归遍历子目录,因为你要操作的文件使用的*通配符.777,第一个7代表文件所属者的权限,第二个7代表文件所属者所在组的权限,第三个7代表其 ...
- React-非dom属性-dangerouslySetInnerHTML标签
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
- MyBatis笔记——Mapper动态代理
前提概要 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mappe ...
- PHPStorm IDE 快捷键(MAC)
⌘——Command ⌃ ——Control ⌥——Option/Alt ⇧——Shift ⇪——Caps Lock fn——功能键就是fn 编辑 Command+alt+T 用 (if..else, ...
- Objective-C:三种文件导入的方式以及atomic和nonatomic的区别
一.三种文件导入的方式比较: 类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...
- 常用WinPE
微PE工具箱:http://www.wepe.com.cn/ 绝对PE工具箱:http://dl.pconline.com.cn/download/64736.html 通用PE工具箱:http:// ...
- CF 314C Sereja and Subsequences(树状数组)
题目链接:http://codeforces.com/problemset/problem/314/C 题意:给定一个数列a.(1)写出a的不同的所有非下降子列:(2)定义某个子列的f值为数列中各个数 ...
- Oracle Report : REP-1219
+---------------------------------------------------------------------------+ 总帐管理系统: Version : 12.0 ...