标签:
数组以有序序列储存对象。因此,一组对象的顺序很重要时,就该使用数组。例如,许多应用程序使用数组向表格视图中的行或菜单中的项目提供内容;索引为 0 的对象对应于第一行,索引为 1 的对象对应于第二行,依此类推。访问数组中对象的时间,比访问集合中对象的时间长。
NSArray
类提供许多初始化程序和类工厂方法,用于创建数组和对数组进行初始化,但有几个方法尤其常见和实用。您可以使用 arrayWithObjects:count:
和 arrayWithObjects:
方法(及其对应的初始化程序 initWithObjects:count:
和 initWithObjects:
),从一系列对象创建数组。使用前一种方法时,第二个参数指定第一个参数(静态 C 数组)中的对象数;使用后一种方法时,其参数为以逗号分隔的对象序列(以 nil
终止)。
// Compose a static array of string objects |
NSString *objs[3] = {@"One", @"Two", @"Three"}; |
// Create an array object with the static array |
NSArray *arrayOne = [NSArray arrayWithObjects:objs count:3]; |
// Create an array with a nil-terminated list of objects |
NSArray *arrayTwo = [[NSArray alloc] initWithObjects:@"One", @"Two", @"Three", nil]; |
创建可变数组时,可以使用 arrayWithCapacity:
(或 initWithCapacity:
)方法创建数组。容量参数将有关数组预期大小的提示提供给类,从而使数组在运行时更高效。数组甚至可以超过所指定的容量。
您还可以使用容器字面常量 @[
...]
创建数组,其中方括号之间的项目是以逗号分隔的对象。例如,要创建包含一个字符串、一个数字和一个日期的数组,您可以编写以下代码:
NSArray *myArray = @[ @"Hello World", @67, [NSDate date] ]; |
通常,您调用 objectAtIndex:
方法访问数组中的对象,方法是指定该对象在该数组中的索引位置(从 0 开始)。
NSString *theString = [arrayTwo objectAtIndex:1]; // returns second object in array |
NSArray
提供其他方式来访问数组中的对象或其索引。例如,有 lastObject
、firstObjectCommonWithArray:
和 indexOfObjectPassingTest:
。
您可以使用下标记号(而非使用 NSArray
的方法)访问数组中的对象。例如,要访问 myArray
(上面已创建)中的第二个对象,您可以编写如下代码:
id theObject = myArray[1]; |
与数组有关的另一个常见任务,是对数组中的每个对象执行某种操作——这是称为枚举的过程。您通常枚举数组,来决定一个对象或多个对象是否与某个值或条件匹配;如果有一个对象匹配,则使用该对象完成一项操作。您可以采用以下三种方式之一枚举数组:快速枚举、使用块枚举或使用 NSEnumerator
对象。顾名思义,快速枚举通常比使用其他技巧访问数组中的对象要快。快速枚举是一项需要特定语法的语言功能:
for (
type variable in
array)
{
/* inspect
variable, do something with it */ }
例如:
NSArray *myArray = // get array |
for (NSString *cityName in myArray) { |
if ([cityName isEqualToString:@"Cupertino"]) { |
NSLog(@"We‘re near the mothership!"); |
break; |
} |
} |
数个 NSArray
方法使用块来枚举数组,其中最简单的是 enumerateObjectsUsingBlock:
。此块具有三个参数:当前对象、其索引和引用的 Boolean 值(设置为 YES
时终止枚举)。此块中的代码执行的工作,与快速枚举语句中大括号内的代码完全相同。
NSArray *myArray = // get array |
[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { |
if ([obj isEqual:@"Cupertino"]) { |
NSLog(@"We‘re near the mothership!"); |
*stop = YES; |
} |
}]; |
NSArray
具有其他方法用于給数组排序、搜索数组和在数组中的每个对象上调用方法。
通过调用 addObject:
方法,可将对象添加到可变数组;对象放在数组末尾。您也可以使用 insertObject:atIndex:
,将对象放在可变数组中的特定位置。通过调用 removeObject:
方法或 removeObjectAtIndex:
方法,可以从可变数组中移除对象。
您还可以使用下标记号,将对象插入可变数组中的特定位置。
NSMutableArray *myMutableArray = [NSMutableArray arrayWithCapacity:1]; |
NSDate *today = [NSDate date]; |
myMutableArray[0] = today; |
标签:
原文地址:http://www.cnblogs.com/lelun/p/5558396.html