NSArray的基本使用
2016-12-15 本文已影响83人
Coder007
NSArray基本概念
- 只能存放任意OC对象,并且是有序的
- 不能存储非OC对象,比如int\float\double\char\enum\struct等
- 是不可变的,一旦初始化完毕,里面的内容固定不变,不可删除里面的元素,也不能增加元素
NSArray创建方式
- 通常我们创建NSArray的时候,我们使用类方法进行创建
+ (instancetype)array;
+ (instancetype)arrayWithObject:(ObjectType)anObject;
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ...;
+ (instancetype)arrayWithArray:(NSArray<ObjectType> *)array;
+ (nullable NSArray<ObjectType> *)arrayWithContentsOfFile:(NSString *)path;
+ (nullable NSArray<ObjectType> *)arrayWithContentsOfURL:(NSURL *)url;
NSArray的注意事项
- NSArray中不能存储nil,因为NSArray认为nil是数组的结束标记
NSArray的常用方法
NSArray *arr = @[@"123",@"456",@"6777"];
// 获取数组元素个数
NSUInteger count = [arr count];
// 获取index位置的元素
NSString *str1 = [arr objectAtIndex:0];
// 是否包含某一个元素
BOOL isContain = [arr containsObject:@"123"];
// 返回最后一个元素
NSString *str2 = [arr lastObject];
// 返回第一个元素
NSString *str3 = [arr firstObject];
// 查找元素在数组中得位置,如果找不到返回-1
int index = [arr indexOfObject:@"111"];
快速创建方式
NSArray *arr = @[@"123", @"qwe"];
遍历数组
NSArray *arr = @[@"3",@"1",@"4",@"10",@"5"];
// 下标遍历
for (int i = 0; i < arr.count; i++) {
NSLog(@"%@",arr[i]);
}
// 快速遍历
for (NSString *str in arr) {
NSLog(@"%@",str);
}
// 使用block遍历
// stop用来控制什么时候遍历停止,*stop = YES 将停止遍历
[arr enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@",obj);
}];
给NSArray中所有元素发消息
- 如果集合中保存的是自定义对象,想让集合中得所有对象都执行某一个方法的时候
- 可以使用以下两个方法
如果数组中的对象没有这个方法会报错
[arr makeObjectsPerformSelector:@selector(方法名)];
[arr makeObjectsPerformSelector:@selector(方法名:) withObject:@""];
NSArray排序
- 数组中得元素都是Foundation框架中的对象,不是自定义对象
- 使用compare:方法进行排序
NSArray *arr = @[@3,@1,@4,@10,@5];
NSArray *newArr1 = [arr sortedArrayUsingSelector:@selector(compare:)];
- 下面的这个方法可以针对Foundation框架中的对象,也可以是自定义对象
- 默认是升序排序
- block中的两个参数类型可以根据数组中元素的类型进行更改
NSArray *arr = @[@3,@1,@4,@10,@5];
NSArray *newArr2 = [arr sortedArrayUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) {
return obj1 > obj2;
}];
NSArray与NSString之间的转换
- NSArray 转换为 NSString
- - (NSString *)componentsJoinedByString:(NSString *)separator;
- separator 插入元素之间的字符串
NSArray *arr = @[@3,@1,@4,@10,@5];
NSString *str = [arr componentsJoinedByString:@"--"];
- NSString 转换成 NSArray
- - (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;
- eparator 最为分割符切割字符串
NSString *str1 = @"3--1--4--10--5";
NSArray *arr1 = [str1 componentsSeparatedByString:@"--"];
NSArray文件读写
- 将数组写入文件
- 数组元素必须是Foundation框架中类创建的对象
- 如果是自定义对象将没有办法写入
NSArray *arr = @[@"123",@"awe11",@"zdxcq"];
[arr writeToFile:@"/Users/coder/Desktop/sublime.plist" atomically:YES];
- 从文件中读取数据到NSArray中
NSArray *arr1 = [NSArray arrayWithContentsOfFile:@"/Users/coder/Desktop/sublime.plist"];