#warning message - NSArray, NSNumber
#pragma mark - 不可变数组
//IOS中存放数据的容器类都称为集合(collection),数组是存储在UI中可显示内容的集合
//注意:数组是有序集合,数组中的元素都为对象类型;数组有下标(index)的概念.靠index来索引元素,下标从0开始
#warning message - 关于 [NSArray array] 和 [[NSArray alloc] init]
//[NSArray array]不需要release,使用autoreleasepool机制;
//[[NSArray alloc] init]需要自己手动release,ARC环境下不需要手动release;
NSArray *arr = [[NSArray alloc] initWithObjects:@"GaiLun", @"JiaWen", @"ZhaoXin", @"LaKeSi", nil];
NSArray *arr1 = [NSArray arrayWithObjects:@"GaiLun", @"JiaWen", @"ZhaoXin", @"LaKeSi", nil];
NSLog(@"arr = %@", arr);
NSLog(@"arr1 = %@", arr1);
//[arr release];会报错
NSArray *arr2 = [NSArray arrayWithArray:arr];
NSLog(@"arr2 = %@", arr2);
//新建一个数组,数组中的元素为数组
NSArray *arr3 = [NSArray arrayWithObjects:arr, arr1, arr2, nil];
//新数组中的元素个数为 3
NSLog(@"arr3.count = %ld", arr3.count);
//通过下标访问数组中的元素
NSLog(@"arr[0] = %@", arr[0]);
NSLog(@"arr[1] = %@", [arr objectAtIndex:1]);
//通过元素找下标
NSLog(@"下标 = %ld", [arr indexOfObject:@"Zhaoxin"]);
#pragma mark - 可变数组
//可变数组必须先初始化之后才能使用,是NSArray的子类,继承NSArray的所有方法
// NSMutableArray *arrM = [NSMutableArray array];
//数组arrM直接从arr数组中获取元素
// [arrM addObjectsFromArray:arr];
// NSLog(@"arrM = %@", arrM);
//数组arrM中有一个元素,就是arr数组
// [arrM addObject:arr];
// NSLog(@"arrM = %@", arrM);
NSMutableArray *arrM = [NSMutableArray array];
NSArray *arrN = [NSArray arrayWithObjects:@"GaiLun", @"JiaWen", @"ZhaoXin", @"LaKeSi", nil];
[arrM addObjectsFromArray:arrN];
NSLog(@"arrM = %@", arrM);
#pragma mark - 添加
[arrM addObject:@"xxxxx"];
NSLog(@"arrM = %@", arrM);
NSLog(@"arrM[3] = %@", [arrM objectAtIndex:3]);
NSLog(@"arrM[3] = %@", arrM[3]);
#pragma mark - 删除
//通过值删除
[arrM removeObject:@"LaKeSi"];
NSLog(@"arrM = %@", arrM);
//通过下标删除
[arrM removeObjectAtIndex:3];
NSLog(@"arrM = %@", arrM);
//删除最后一个
[arrM removeLastObject];
NSLog(@"arrM = %@", arrM);
#pragma mark - 替换
//把下标为N的元素用xxxxx替换
[arrM replaceObjectAtIndex:1 withObject:@"UUUUUUU"];
NSLog(@"arrM = %@", arrM);
#pragma mark - 交换
[arrM exchangeObjectAtIndex:0 withObjectAtIndex:1];
NSLog(@"arrM = %@", arrM);
#pragma mark - 遍历数组,冒泡排序
//建立数组
NSMutableArray *arrU = [NSMutableArray array];
NSArray *arr0 = [NSArray arrayWithObjects:@"GaiLun", @"JiaWen", @"ZhaoXin", @"LaKeSi", nil];
[arrU addObjectsFromArray:arr0];
NSLog(@"arrU = %@", arrU);
//通过下标遍历
for (NSInteger i = 0; i < arrU.count - 1; i++) {
for (NSInteger j = 0; j < arrU.count - i - 1; j++) {
if (NSOrderedDescending == [[arrU objectAtIndex:j] compare:[arrU objectAtIndex:j + 1]]) {
[arrU exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
}
}
}
for (NSInteger i = 0; i < arrU.count; i++) {
NSLog(@"arrU = %@", [arrU objectAtIndex:i]);
}
#pragma mark - 值对象 NSNumebr
//完成数值标量 和 对象类型 的 互转
//所有的基础类型变量是不能当对象存储到容器中(数组,字典等),因此,基础类变量想要存储的话需要转换成对象才能存储,读取时先取出对象,再将对象还原为以前的类型
NSInteger a1 = 10;
NSNumber *num1 = [NSNumber numberWithInteger:a1];
[arrU addObject:num1];
NSNumber *num2 = [arrU lastObject];
NSInteger b = [num2 integerValue];
NSLog(@"%ld", b);
//NSValue(对应的结构体)
//将结构体转换为对象
NSRange range99 = NSMakeRange(0, 0);
NSValue *v = [NSValue valueWithRange:range99];
NSLog(@"%@", v);