在学习 Objective-C的过程当中,感受数组在这一个学习方面是一个比较大的应用域,因此写这篇随笔来总结一下。数组
首先声明的是,与C语言的数组不一样,Objective-C的是数组只能用来存储对象,而不是存储int 、double、char等基础数据类型,通常要存这些基础数据类型,对于我这个刚学 Objective-C的新手来讲,个人作法是将有关数字的基础类型 如 int 、double、char首先转换成一个叫作 NSNumber的类 char*类型的转换成 Objective-C的字符串 NSString 类来进行储存,相关 NSNumber 和 NSString 在之后我学习到的时候会来总结一下个人学习成果。学习
Objective-C的数组分为两种,一种叫作不可变数组(NSArray),一种叫作可变数组(NSMutableArray),NSMutableArray类是NSArray类的一个子类。spa
(1)不可变数组(NSArray) ---------该类型在肯定以后,不能进行数组元素的更改以及交换对象
//初始化------(两种方式)rem
NSArray * array =[ [NSArray alloc] initWithObjects:@"abc",@"123",@"ABC", nil]; 字符串
NSArray * array = @[@"abc",@"123",@"ABC"]; //后来看到老师定义数组的时候用这种方式进行的初始化,因此也记录了下来it
(2)可变数组(NSMutableArray)-------该类型在肯定以后,能够进行元素的增、删、改(包括元素的位置 以及 数组的元素个数) for循环
//初始化------(两种方式)table
NSMutableArray * mutableArray = [[NSMutableArray alloc] init];ast
NSMutableArray * mutableArray = [NSMutableArray array]; //教个人老师演示时的初始化,两种初始化有没有区别,或者不一样,如今先不讨论
//增长元素
对于可变数组,苹果给咱们提供了不少方法,由于新手的缘由,我基本也使用了其中的一种
[mutableArray addObject:(id)]; //这是mutableArray 对象调用增长元素的一个方法
例如:[mutableArray addObject:@"EFG"]; //这是在mutableArray 对象中添加了一个NSString 类型的元素,值为@"EFG"
// 删除元素
[mutableArray removeAllObjects]; //这个方法是移除 mutableArray 中的全部元素
[mutableArray removeLastObject]; //这个方法是移除 mutableArray 的最后一个元素
[mutableArray removeObject:(id)]; //这个方法是移除值为id的元素(这样描述实际上是不正确的),id实际存放的应该是地址,但字符串除外
例如:[mutableArray removeObject:@"abc"]; //这是在mutableArray 对象中删除了一个值为"abc"的元素
[mutableArray removeObjectAtIndex:(NSUInteger)]; //这个方法是移除位置为 NSUInteger 的元素,这个数字实际是删除相似下标为 NSUInteger的元素
例如:[mutableArray removeObjectAtIndex:3]; //这是删除了第4个元素
//修改元素位置
[mutableArray exchangeObjectAtIndex:(NSUInteger1) withObjectAtIndex:(NSUInteger2)] //这个方法是将位置 NSUInteger1 的元素和 NSUInteger2 的元素进行交换位置
例如:[mutableArray exchangeObjectAtIndex:1 withObjectAtIndex:2];//意思是将第2个元素和第3个元素交换(由于NSUInteger是下标)
/*****
***数组的遍历 (我所了解的目前有三种方式)
****/
一、枚举器法 (这种方法在遍历过程当中不能改变数组的个数以及元素的位置,否则会出错)
NSEnumerator * enumerator = [mutableArray objectEnumerator];//构造枚举器
id obj;
while (obj = [enumerator nextObject]) {
//obj既为元素
}
二、快速枚举法 (有的叫作 快速for循环) (这种方法依旧在遍历过程当中不能改变数组的个数以及元素的位置,否则会出错)
for(id obj in mutableArray){
//obj既为元素
} //这种方法他们都说是最快的,我也就看成最快的来用
对于枚举器,还有一种叫作逆序枚举器,方法以下
NSEnumerator *enumrator = [mutableArray reverseObjectEnumerator];//构造逆序枚举器,用法同枚举器同样,但不同的是,用逆序枚举器遍历的时 候,以上两种方法能够改变数组的个数以及元素的位置。
三、使用for循环进行遍历 (这种遍历方法能够在循环中改变数组的个数以及元素的位置)
for (int i = 0; i < [mutableArray count]; i++) {
id obj = [mutableArray objectAtIndex:i];// obj既为元素
}