黑马程序员-OC-Foundation-NSArray

时间:2022-04-10 00:28:20

——- ios培训ios培训、期待与您交流! ———-
NSArray是什么?
NSArray是OC中集合的一种,同样是Foundation框架下NSObject的一个儿子类.他可以存储不同类型的对象.里面存数的对象是有序的.数组一旦创建成功,内容不可改变.
NSArray几种方法
1.创建数组的几种方法

//1)创建一个空数组
NSArray *arr1 = [NSArray array];//无意义,数组不可变,一旦创建了也不能往里面放元素
//2)创建数组,只有一个元素
NSArray *arr2 = [NSArray arrayWithObject:@"1"];
//3)创建数组,有多个元素
NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1,nil];
//简写的方式:
NSArray *arr3 = @[@"one",@"two",@1]; //与上面等效
//4)调用对象方法,创建数组
NSArray *arr4 = [[NSArray alloc] initWithObjects:@"three",[NSNull null],@"four", nil];
//5)用一个数组可以创建另外一个数组
NSArray *arr5 = [NSArray arrayWithArray:arr3];
NSLog(@"arr5 = %@",arr5);

2.获取数组的长度 count获取数组的元素的个数

NSLog(@"%ld",arr3.count);//调用count方法计算数组arr3的元素个数返回值是长整型.

3.根据下标,获取下标对应的对象

[arr3 objectAtIndex:3]//获取arr3中下标为3的元素
str = arr3[3]//简写的形式

4.返回元素的下标

NSUInteger loc = [arr3 indexOfObject:@"three"]

5.数组中是否包含了某个元素

[arr3 containsObject:@"four"]//返回值是一个BOOL类型的值.

数组的几种遍历方式
1普通的方式,通过下标访问

for (int i=0; i<arr.count; i++) {
NSLog(@"-> %@",arr[i]);
}
  1. 快速枚举法 for循环的增强形式
for (NSString * str in arr) {
NSLog(@"---> %@",str);
}
  1. 使用block的方式,进行访问
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"idx = %ld,obj = %@",idx,obj);
}];

NSArray的几点思考
1.数组是有序的,每一个元素都有一个下标跟它一一对应.
2.一旦创建里面的元素不能改变了.
3.遍历的时候默认返回的是数组里面的元素.
NSMutableArray
NSMutableArray是什么?
NSMutableArray是NSArray的子类,可以使用NSArray的所有方法.
NSMutableArray创建的数组是可变的,意思就是创建后数组的空间是不固定的,可以任意的往里面添加或者删除元素.

NSMutableArray的独有的方法
1.创建数组

//i. 空数组
NSMutableArray *arr1 = [NSMutableArray array];
NSLog(@"%p",arr1);

//ii.创建的时候初始化一个元素
NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"one"];

//iii.创建数组的时候,初始化多个元素
NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"one",@"two",@3,nil];

//IV . 创建一个数组,并且指定长度,
NSMutableArray *arr4 = [NSMutableArray arrayWithCapacity:5];

2.添加元素

[arr1 addObject:@"fengjie"];
[arr1 insertObject:@"zbz" atIndex:0];//插入元素到指定的位置

3.删除元素

//根据对象内容删除
[arr1 removeObject:@"zbz"];
//根据位置删除
[arr1 removeObjectAtIndex:1];
//全部删除
[arr1 removeAllObjects];

4.修改元素

[arr3 replaceObjectAtIndex:1 withObject:@"four"];
//简写的形式:
arr3[1] = @"four";

5.查找是否存在某个元素

BOOL isSearch = [arr3 containsObject:@"four"];

6.可以交换数组元素
[arr5 exchangeObjectAtIndex:0 withObjectAtIndex:4];
关于NSMutableArray的几点思考
1.NSMutableArray* arr=@[@”one”,@2];这种书写方式是错误的,这种简写创建方式默认返回一个不可变的数组,显然是不符合逻辑的.
2.不管是可变的还是不可变的数组,都是数组,里面只能放对象,不可以放 int,float,double等数据.
3.NSMutableArray常见的数组可以为空,可以在创建之后往里面添加元素,所以创建的数组是有意义的,这一点跟NSArray有区别.