Foundation数组是有序的对象的集合,常见的是一个数组中的元素都是一种特定类型,但这不是必须的。数组同样也存在可变数组和不可变数组,不可变数组是由NSArray类处理的,而可变数组是由NSMutableArray类处理的。后者是前者的子类,因此,后者继承了前者的方法。
下面一个程序介绍不可变数组:
#import <Foundation/Foundation.h>
int main ()
{
@autoreleasepool {
//创建一个数组包含月份的名称
NSArray *monthName = [NSArrayarrayWithObjects:@"January",@"February", @"March", @"April",@"May", @"June", @"July",@"August", @"September", @"October",@"November", @"December", nil];
//列出数组中所有的元素
NSLog(@"Month Name");
NSLog(@"===== ==== ");
for (int i =0; i < 12; ++i) {
NSLog(@"%3i %@",i+1,[monthNameobjectAtIndex: i]);
}
}
return 0;
}
运行结果:2014-08-25 17:23:45.423 testOC[2386:303] Month Name
2014-08-25 17:23:45.424 testOC[2386:303] ===== ====
2014-08-25 17:23:45.425 testOC[2386:303] 1 January
2014-08-25 17:23:45.425 testOC[2386:303] 2 February
2014-08-25 17:23:45.426 testOC[2386:303] 3 March
2014-08-25 17:23:45.426 testOC[2386:303] 4 April
2014-08-25 17:23:45.426 testOC[2386:303] 5 May
2014-08-25 17:23:45.427 testOC[2386:303] 6 June
2014-08-25 17:23:45.427 testOC[2386:303] 7 July
2014-08-25 17:23:45.427 testOC[2386:303] 8 August
2014-08-25 17:23:45.428 testOC[2386:303] 9 September
2014-08-25 17:23:45.428 testOC[2386:303] 10 October
2014-08-25 17:23:45.428 testOC[2386:303] 11 November
2014-08-25 17:23:45.429 testOC[2386:303] 12 December
Program ended with exit code: 0
类方法 arrayWithObjects :使用一列对象作为元素创建数组。这种情况下,需要按顺序列出对象并使用逗号隔开。这种方法使用的特殊语法可以接受可变数量的参数。但需要记住参数数组的结束,将这个数组的最后一个值指定为nil,它实际上并不会储存在数组中。使用objectAtIndex:方法需要索引数检索数组中的元素。
下面是一个程序介绍可变数组:
#import <Foundation/Foundation.h>
int main ()
{
@autoreleasepool {
NSMutableArray *number = [NSMutableArray array];
NSNumber *myNumber;
int i;
//创建0~9数字的数组
for (i = 0; i < 10; ++i) {
myNumber = [NSNumber numberWithInteger: i];
[number addObject: myNumber];
}
//遍历数组与显示其值
for (i = 0; i < 10; ++i) {
myNumber = [number objectAtIndex: i];
NSLog(@"%@",myNumber);
}
//使用带有%@格式的NSLog显示
NSLog(@"====== Using a single NSLog");
NSLog(@"%@",number);
}
return 0;
}
运行结果:2014-08-25 22:29:15.458 testOC[507:303] 0
2014-08-25 22:29:15.460 testOC[507:303] 1
2014-08-25 22:29:15.460 testOC[507:303] 2
2014-08-25 22:29:15.461 testOC[507:303] 3
2014-08-25 22:29:15.461 testOC[507:303] 4
2014-08-25 22:29:15.461 testOC[507:303] 5
2014-08-25 22:29:15.462 testOC[507:303] 6
2014-08-25 22:29:15.462 testOC[507:303] 7
2014-08-25 22:29:15.462 testOC[507:303] 8
2014-08-25 22:29:15.463 testOC[507:303] 9
2014-08-25 22:29:15.463 testOC[507:303] ====== Using a single NSLog
2014-08-25 22:29:15.464 testOC[507:303] (
0,
1,
2,
3,
4,
5,
6,
7,
8,
9
)
Program ended with exit code: 0
使用NSMutableArray的方法array创建一个空的可变的数组对象。数组元素并未指定并且可以根据需要增长,并且不能将整数这样的基本数据类型存储在数组之类的集合中。使用方法addObject:会在数组的末尾添加一个对象。
代码的最后,使用单个NSLog格式化%@显示整个数组。对于数组中的每一个元素,NSLog将会使用属于每个元素类的description方法。如果使用的是从NSObject对象继承的默认方法,获取到的是对象的类和地址。然而,在这个例子中,能够获取到更有意义的内容,说明NSNumber类自定义的description方法实现。