注:NSArray一经创建就不可以更改,只能存储NSObject类子类的对象,不能直接存储C语言基本数据类型,也不能直接存储nil空类型的对象。(直接存储是指,不经过处理的存储)
创建数组
- @[@”“, @”“];
// 直接写出数组中的对象
NSArray *boxes = @[ @"12", @"34", @"56" ];
- +arrayWithObjects
// 列出数组中的对象,使用nil结尾。这就是数组为什么不能直接存储nil
NSArray *names = [NSArray arrayWithObjects:@"1", @"2" nil];
读取数组元素
- count
NSArray *names = [NSArray arrayWithObjects:@"1", @"2", nil];
// 只读属性,数组内元素的个数
NSLog(@"%lu", names.count);
- 数组名[下标]
NSArray *names = [NSArray arrayWithObjects:@"1", @"2", nil];
// 可以用数组名[下标]的方式访问元素
NSLog(@"%@", names[0]);
- -containsObject
NSArray *names = [NSArray arrayWithObjects:@"1", @"2", nil];
// 判断给定对象是否在数组中
BOOL result = [names containsObject: @"12"];
- -objectAtIndex:
NSArray *names = [NSArray arrayWithObjects:@"1", @"2", nil];
// 获取指定索引下的对象
NSLog(@"%@", [names objectAtIndex: 0]);
数组的遍历
- 使用block
NSArray *names = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
// 使用块遍历数组
[names enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop){
NSLog(@"%@", obj);
// 根据索引,可以改变stop的值,从而控制是否继续遍历
if (index == 2)
{
*stop = YES;
}
}];
- NSEnumerator
NSArray *names = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
// 获取枚举接口,从而遍历数组
NSEnumerator *e = [names objectEnumerator];
id item;
// 一直到下一个元素为nil
while ((item = e.nextObject))
{
NSLog(@"%@", item);
}
- for in
NSArray *names = @[ @"123", @"456" ];
// 快速遍历
for (id item in names)
{
NSLog(@"%@", item);
}
- for循环遍历
NSArray *names = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
for (int i = 0; i < names.count; ++i)
{
NSLog(@"%@", names[i]);
}
数组的持久化与对象化
- -writeToFile:atomically:
NSArray *names = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
// 存储路径
NSString *path = @"/Users/hskj/arrays.plist";
// 写入
[names writeToFile: path atomically: YES];
使用文本编辑软件打开这个文件,看看它的真面目:
所以,若想从文件中生成一个数组,当然也有遵循这个格式.
- +arrayWithContentsOfFile:
// 存储路径
NSString *path = @"/Users/hskj/arrays.plist";
// 把刚才的文件内容修改下,然后从文件中生成数组
NSArray *names = [NSArray arrayWithContentsOfFile: path];
// 遍历一下
[names enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop){
NSLog(@"%@", obj);
}];
输出的结果为
数组的排序
NSArray *names = @[ @"1", @"4", @"0", @"10" ];
// 排序后,生成新的数组,之前的数组是不可以变的
NSArray *sortedNames = [names sortedArrayUsingSelector: @selector(compare:)];
// 快速遍历
for (id item in sortedNames)
{
NSLog(@"%@", item);
}