Foundation - NSArray
/*
* NSArray :不可变数组
* NSMutableArray : 可变数组
*/
/*
*生成数组,添加与删除元素。
*/
void mutableArray()
{
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"jim", nil];
// 每添加一个新元素到数组中,都会对这个元素做一次retain操作
// 每删除一个元素,都会对这个元素做一次release
// 当数组被销毁的时候,数组中的所有元素都会做一次release
[array addObject:@"jack"];
[array addObject:@"mike"];
}
/*
*数组的读取
*/
void arrayImport()
{
NSArray *array = [NSArray arrayWithContentsOfFile:@"/Users/apple/Desktop/array.txt"];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%zd - %@", idx, obj);
}];
}
/*
*数组元素写入文件
*/
void arrayExport()
{
/* 字符串写入文件:
NSString *str = @"3424324fsdfdsfdsfsdfsdf";
[str writeToFile:@"/Users/apple/Desktop/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
*/
1.
NSArray *array = [NSArray arrayWithObjects:@"哈哈哈", @"adsad", @"的方式发生地方", nil];
[array writeToFile:@"/Users/apple/Desktop/test.txt" atomically:YES];
2.
//NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/array.txt"];
//[array writeToURL:url atomically:YES];
}
/*
*数组元素按行读取
*/
void arrayString2()
{
NSString *str = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/mj.txt" encoding:NSUTF8StringEncoding error:nil];
// 解析出文件中的每一行内容
NSArray *array = [str componentsSeparatedByString:@"\n"];
[array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"第%zd行的内容:%@", idx, obj);
}];
}
/*
* 数组 和 字符串 的相互转换:
*/
void arrayString()
{
NSString *str = @"mike-jack-rose-jim";
// 利用中划线 - 来分割字符串
NSArray *array = [str componentsSeparatedByString:@"-"];
NSLog(@"%@", array);
// 把数组中的所有元素用*连接成一个新的字符串
NSString *str2 = [array componentsJoinedByString:@"*"];
NSLog(@"str2=%@", str2);
}
/*
* 数组的内存管理
*/
void arrayMemory()
{
// p1 : 1
Person *p1 = [[Person alloc] init];
p1.age = 11;
// p2 : 1
Person *p2 = [[Person alloc] init];
p2.age = 12;
// 每当有一个对象被添加到NSArray中时,会对这个对象做一次retain操作
// p1 : 2
// p2 : 2
// array : 1
NSArray *array = [[NSArray alloc] initWithObjects:p1, p2, nil];
// p1 : 1
[p1 release];
// 当数组(NSArray)对象被销毁的时候,会对内部存储的所有对象做一次release操作
// array : 0
// p1 : 0
// p2 : 1
[array release];
// p2 : 0
[p2 release];
}
/*
* 数组遍历
*/
void arrayFor()
{
NSArray *array = [NSArray arrayWithObjects:@"mike", @"jack", @"rose", @"jake", nil];
// 1.最土的方式
/*
for (int i = 0; i<array.count; i++) {
id obj = [array objectAtIndex:i];
NSLog(@"%d-%@", i, obj);
if (i == 2) break;
}*/
// 2.快速遍历
// 每次遍历都取出元素赋值给obj
/*
for (id obj in array)
{
NSLog(@"%@", obj);
}*/
// 3.利用block遍历数组
// 当数组每遍历一个元素时,就会调用一次block,而且每次传入的参数值都不一样
[array enumerateObjectsUsingBlock:
// id obj : 元素
// NSUInterger idx : 索引、位置、角标
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"idx=%zd, obj=%@", idx, obj);
if (idx == 1)
{
// 停止遍历
*stop = YES;
}
}];
// block遍历底层原理:
// void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
// {
// NSLog(@"%ld - %@", idx, obj);
//
//
// if (idx == 0)
// {
// // 停止遍历
// *stop = YES;
// }
// };
//
// for (int i = 0; i<array.count; i++)
// {
// // 用来标记是否需要停止遍历
// BOOL isStop = NO;
//
// // 取出元素
// id obj = array[i];
//
// myblock(obj, i, &isStop);
//
//
// if (isStop)
// {
// break;
// }
// }
}
/*
* 数组的创建
*/
void arrayCreate()
{
// NSArray只能放OC对象,不能直接存放基本数据类型(比如int、struct、enum等),也不能存放nil值。
// 这个array永远是空数组
// NSArray *array = [NSArray array];
// 1.这个数组对象永远只有1个元素:@“mike”
//NSArray *array = [NSArray arrayWithObject:@"mike"];
// nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
NSArray *array = [NSArray arrayWithObjects:p, @"jack", @"mike", @"jim", nil];
// 快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @"4324324"];
// 2.返回元素个数
NSLog(@"count=%zd", [array count]);
// 3.NSArray中元素的访问
NSLog(@"%@", [array objectAtIndex:1]);
NSLog(@"%@", array[0]);
}
/*
* NSMutableArray - 可变数组的基本使用
*/
void use3()
{
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
// 添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
// 删除元素
//[array removeAllObjects];
// 删除指定的对象
// [array removeObject:@"jack"];
[array removeObjectAtIndex:0];
// 错误写法
// [array addObject:nil];
NSLog(@"%@", array);
NSLog(@"%ld", array.count);
}