创建数组NSArray与NSMutableArray
问题
应用需要在列表中组织对象。
解决方案
Objective-C 提供了两个Foundation 类来创建对象列表,它们分别是NSArray 与NSMutableArray。如果列表不需要改变,那么请使用NSArray 类;如果要向数组添加和删除对象,那么请使用NSMutableArray 类。
说明
在Objective-C 中,数组的创建与其他对象类似:使用alloc 与init 构造函数,或者使用诸如arrayWithObjects:之类的便捷函数创建数组。如果使用NSArray 创建数组,那么一旦数组创建完毕,就无法再进行修改。使用NSMutableArray 创建的数组可以在后面修改。
下面的示例展示了如何创建字符串数组:
NSArray *listOfLetters = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
在使用arrayWithObjects:创建数组时,需要传递使用逗号分隔的对象列表并以nil 结束。该例使用了NSString 对象,但对于NSArray 与NSMutableArray 来说,可以使用任何对象,包括从自定义类实例化得来的对象。如果使用NSMutableArray,那么可以通过相同的构造函数来创建数组(NSMutableArray是NSArray 的子类)。如果后面还要向数组中添加对象,那么还可以通过alloc 与init 来创建NSMutableArray 对象。表3-1 列出了NSArray 与NSMutableArray 类的完整构造函数列表,程序清单3-1 列出了相关的代码。
代码
程序清单1-1 main.m
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
@autoreleasepool {
NSArray *listOfLetters1 = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
NSLog(@"listOfLetters1 = %@", listOfLetters1);
NSNumber *number1 = [NSNumber numberWithInt:1];
NSNumber *number2 = [NSNumber numberWithInt:2];
NSNumber *number3 = [NSNumber numberWithInt:3];
NSMutableArray *listOfNumbers1 = [[NSMutableArray alloc]
initWithObjects:number1, number2, number3, nil];
NSLog(@"listOfNumbers1 = %@", listOfNumbers1);
id list[3];
list[0] = @"D";
list[1] = @"E";
list[2] = @"F";
NSMutableArray *listOfLetters2 = [[NSMutableArray alloc]
initWithObjects:list
count:3];
NSLog(@"listOfLetters2 = %@", listOfLetters2);
}
return 0;
}
使用
要想使用上述代码,请从Xcode 构建并运行Mac 应用。通过日志查看每个数组的内容。接下来的攻略将会介绍如何引用这些数组元素,这样就可以将它们的内容打印到日志或是在程序的其他地方使用它们了。