NSArray和NSMutableArray

NSArray:

只能存放对象。不能存放C语言中基本的数据类型。如int/double/float等等

数组下标越界不会有警告,运行时会直接报错

// 不可变数组NSArray
// 在数组从存入nil需要使用NSNull,不可以直接存入nil,因为在数组中nil代表数组结束
NSNull *n = [NSNull null];
 // 创建数组对象,并在其中添加几个NSString对象,nil代表数组的结束,不可能更改
NSArray *array1 = [NSArray arrayWithObjects:@"one", @"tow", n, @"three", nil];
NSArray *array2 = [NSArray arrayWithObject:@"呵呵,你真逗。。。。。"];

// 计算数组的长度
NSLog(@"array1 count : %ld", [array1 count]);
NSLog(@"array2 count : %ld", [array2 count]);

// 取出数组中得对象
// 简单的使用for循环通过下边来获取对象
for (int i = 0; i < [array1 count]; i++) {
    NSLog(@"array1[%d] = %@", i, [array1 objectAtIndex:i]);
}

// 以消息嵌套的形式实例化一个NSArray对象
NSArray *array3 = [[NSArray alloc] initWithObjects:@"abc", @"def", @"haha", nil];
NSLog(@"array3 = %ld", [array3  count]);
NSLog(@"%@", array3); // 数组使用小括号来包括

// 释放内存
[array3 release];



// 可变数组NSMutableArray
// 通过arrayWithCapacity:来创建一个可变数组,指定长度为10
NSMutableArray *mutableArray1 = [NSMutableArray arrayWithCapacity:10];

// 使用类方法创建一个对象
mutableArray1 = [NSMutableArray arrayWithObjects:@"111", nil];

// 通过addObject对象添加对象
[mutableArray1 addObject:@"one"];
[mutableArray1 addObject:@"two"];
[mutableArray1 addObject:@"three"];

// 打印数组的长度
NSLog(@"mutableArray count =  %ld", [mutableArray1 count]);

// 打印数组
NSLog(@"mutableArray %@", mutableArray1.description);

// 使用for循环打印数组
for (int i = 0; i < [mutableArray1 count]; i++) {
    NSLog(@"mutableArray[%d] = %@", i, [mutableArray1 objectAtIndex:i]);
}

// 删除数组中得对象
// [mutableArray1 removeLastObject]; // 删除最后一个对象
// [mutableArray1 removeObject:@"111"]; // 删除指定名称的对象
[mutableArray1 removeObjectAtIndex:1]; // 删除指定位置的对象
// [mutableArray1 removeAllObjects]; // 删除全部对象

NSLog(@"mutableArray %@", mutableArray1.description);

// 向可变数组中插入对象, 插入的字符串中有空格的时候会被双引号包围
[mutableArray1 insertObject:@"new String" atIndex:2 ];
NSLog(@"mutableArray %@", mutableArray1.description);    

// 替换数组中对象 // 存入中文时直接打印数组会出现"\U7231\U597d"这种形式,需要从数组中取出来才可以正常显示
[mutableArray1  replaceObjectAtIndex:3 withObject:@"爱好"];
NSLog(@"mutableArray %@", mutableArray1.description);
NSString *string = [mutableArray1 lastObject];
NSLog(@"%@", string);

// 数组的替换
// 数组的简写@[@"0", @"2"]
NSRange range = NSMakeRange(1, 2);
// 对应的进行替换
[mutableArray1 replaceObjectsInRange:range withObjectsFromArray:@[@"1111111", @"2222222"]];
NSLog(@"mutableArray %@", mutableArray1.description);


// 数组的排序
// 可变数组直接在原数组上进行排序,不可变数组排序后产生新的数组
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"3", @"6", @"2", @"1", nil];
NSLog(@"%@", array1);
// 使用选择器进行比较数组,返回一个升序的数组
[array1 sortUsingSelector:@selector(compare:)];
NSLog(@"使用选择排序后: %@", array1);

// 使用sortUsingCompare:
[array1 sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    obj1 = @"1";
    obj2 = @"2";
    return NSOrderedDescending;
    }];
NSLog(@"使用选择排序后: %@", array1);    

// 用规定的描述对数组进行排序
// NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];
// [array1 sortUsingSelector:[NSArray arrayWithObject:sd]];
// NSLog(@"%@", array1);


// 数组的遍历
 // 创建数组
    NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"3", @"6", @"2", @"1", nil];
// 可以通过枚举器和nextObject可以返回当前对象

// 使用NSEnumerator遍历对象,通过给数组发送objectEnumerator获取到整个数组的枚举器
NSEnumerator *enumerator = [array1 objectEnumerator];
// 储存数组中每个元素对象
id object = nil;
while (object = [enumerator nextObject]) { // 通过nextObject消息读取下一个元素对象
    NSLog(@"%@", object);
}

// 使用 快速枚举 遍历数组取值
id object1 = nil;
for (object1 in array1) {
    NSLog(@"%@", object1);

}