黑马程序员技术交流社区
标题:
关于OC中数组的介绍和注意事项
[打印本页]
作者:
手心的温度
时间:
2015-8-28 22:19
标题:
关于OC中数组的介绍和注意事项
一,NSArray
1,NSArray介绍
1),NSArray是OC中的数组类, 开发中建议尽量使用NSArray替代C语言中的数组;
2),只能存放任意OC对象, 并且下标都是有顺序的;
3),不能存储非OC对象, 比如int\float\double\char\enum\struct等;
4),它是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的,不能删除里面的元素,也不能再往里面添加元素;
5),不能存放nil值,可以存放NSNull对象;例如:[NSNull null];
2,NSArray的创建方式
1),类方法创建
+ (instancetype)array;
+ (instancetype)arrayWithObject:(id)anObject;
+ (instancetype)arrayWithObjects:(id)firstObj, ...;
+ (instancetype)arrayWithArray:(NSArray *)array;
+ (id)arrayWithContentsOfFile:(NSString *)path;
+ (id)arrayWithContentsOfURL:(NSURL *)url;
2),对象方法创建
- (instancetype)initWithObjects:(id)firstObj,... ;
- (instancetype)initWithArray:(NSArray *)array;
- (NSArray *)initWithContentsOfFile:(NSString *)path;
- (NSArray *)initWithContentsOfURL:(NSURL *)url;
3),常见用法
- (NSUInteger)count; 获取集合元素个数
- (id)objectAtIndex:(NSUInteger)index; 获得index位置的元素
- (BOOL)containsObject:(id)anObject;是否包含某一个元素
- (id)lastObject; 获取最后一个元素
- (id)firstObject; 获取第一个元素
- (NSUInteger)indexOfObject:(id)anObject; 查找anObject元素在数组中的位置
3,NSArray的简写形式(这种简写方式,称为字面量)
NSArray *arr = @[@"Jack", @"Rose", @"Jim"];
格式:
NSArray *arr = @[数组元素];
获取元素格式:
arr[元素角标index];
NSString *str = arr[0];//获取第零个元素
4,NSArray的遍历
NSArray *arr = @[@"one",@"two",@"three",@"four"];
1),普通for循环,通过下标访问
for (int i=0; i<arr.count; i++) {
NSLog(@"-> %@",arr[i]);
}
2),增强for循环 (for in)
for (NSString * str in arr) {
NSLog(@"---> %@",str);
}
3),使用block的方式,进行遍历
//block的三个参数含义: 1,数组元素 2,元素下标 3,是否停止
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if(idx == 2){
*stop = YES; //停止 // break;
}else{
NSLog(@"idx = %ld,obj = %@",idx,obj);
}
}];
5,NSArray 读写文件
1),将数组元素写入文件
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
代码:
NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
//写入数据到plist文件中
if([arr writeToFile:@"/Users/liwei/Desktop/arr.plist" atomically:YES]){
NSLog(@"写入成功!");
}
2),从文件读取数组
+ (NSArray *)arrayWithContentsOfFile:(NSString *)path;
代码:
NSArray *readArr = [NSArray arrayWithContentsOfFile:@"/Users/zhaoxiaohu/Desktop/arr.xml"];
6,NSArray 与字符串
1),把数组元素链接成字符串(NSArray的方法)
- (NSString *)componentsJoinedByString:(NSString *)separator;
这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串
2),字符串分割方法(NSString的方法)
NSString *str =@"400-588-1688";
NSArray *arr = [str componentsSeparatedByString:@"-"];
二,NSMutableArray
1,NSMutableArray介绍
1),NSMutableArray是NSArray的子类
2),NSArray是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素 。
3),NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素
2,NSMutableArray基本使用方法
1),创建数组
//创建空数组
NSMutableArray *arr = [NSMutableArray array];
//创建数组,并且指定长度为5,此时也是空数组
NSMutableArray *arr2 = [[NSMutableArray alloc] initWithCapacity:5];
//创建一个数组,包含两个元素
NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"1",@"2", nil];
//调用对象方法创建数组
NSMutableArray *arr4 = [[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];
2),添加元素
- (void)addObject:(id)object; 添加一个元素
3),插入元素
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
4),删除元素
- (void)removeAllObjects;//删除全部
- (void)removeLastObject;//删除最后一个
- (void)removeObjectAtIndex:(NSUInteger)index;//删除指定位置
- (void)removeObject:(id)anObject;//删除指定元素
5),修改元素
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
6),查找元素
- (BOOL)containsObject:(id)anObject;
7),交换元素
交换idx1和idx2位置的元素
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
NSMutableArray 错误用法
NSMutableArray *array = @[@"bob", @"steve", @"john"];//这句话报警告
使用@[@"bob", @"steve", @"john"]这种方式创建的永远是NSArray(不可变数组);
正确用法:
NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"bob", @"steve", @"john"]];
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2