NSArray
定义一个NSArray对象
NSArray *array = [[NSArray alloc] initWithObjects:@"apple", @"banana", @"pear", nil];
或
NSArray *array1 = [NSArray arrayWithObjects:@"C", @"C++", @"Java", nil];
NSArray对象的最后一个“元素”必须为
nil
,但它只是作为数组结束的标志(便于使用NSEnumerator
等工具来遍历),既不会算入数组的长度,也不会被输出。
NSArray常用方法
- 用一个数组初始化另一个数组:
NSArray *array2 = [[NSArray alloc] initWithArray:array1];
或
NSArray *array3 = [NSArray arrayWithArray:array1];
这两种方法都属于深拷贝,但后者创建的拷贝具有自动释放的特性,即用户不持有这个对象,也无需手动释放它,系统会自动择机释放这个对象的内存。
- 在一个数组的尾部添加一个新的元素,来初始化一个新的数组:
NSArray *array4 = [array1 arrayByAddingObject:@"Swift"];
- 从一个数组种截取自定义范围的所有元素,来初始化一个新的数组(需要使用
NSRange
范围类):
NSRange range = NSMakeRange(1, 2);
NSArray *array5 = [array4 subarrayWithRange:range];
- 用直接赋值的方式初始化一个数组:
NSArray *array6 = @[@"apple", @"banana", @"peer"];
这种方式不需要在数组最后添加
nil
- 获得数组的长度(元素个数),返回的是
NSUInteger
类型:
int count = [array5 count];
- 获得数组位于指定索引值处的元素:
id i = [array5 objectAtIndex:3];
id
是OC中一种通用的对象类型,它可以指向任意类型的OC对象,大概相当于C中的void *
或C++的auto
智能指针
- 获得数组的第一个和最后一个元素:
id first = [array firstObject];
id last = [array lastObject];
- 判断数组中是否包含一个元素,返回布尔值:
BOOL b = [array containsObject:@"apple"];
- 获得一个元素在数组中的索引位置,返回值也是
NSUInteger
类型:
unsigned int p = [array indexOfObject:@"banana"];
- 遍历输出数组元素,除了
array[index]
,还可以使用for-in语句:
for (NSString *element in array5){
printf("%s ", [element UTF8String]);
}
- 使用枚举器输出数组元素:
NSEnumerator *e = [array5 objectEnumerator];
id enumerator;
while (enumerator = e.nextObject) {
NSLog(@"%@ ", enumerator);
}
- 通过枚举和闭包语句相结合的方式遍历数组:
[array enumerateObjectsUsingBlock:^(id str, NSUInteger index, BOOL *te) {
NSLog(@"%@, %d ", str, index);
}];
也可以反向:
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id str, NSUInteger index, BOOL *te) {
NSLog(@"%@, %d ", str, index);
}];
- 以指定字符为分隔符,将字符串分隔成由若干元素组成的数组:
NSString *string = @"cat,dog,fish";
NSArray *str2Arr = [string componentsSeparatedByString:@","];
NSLog(@"%@", str2Arr);
输出如下:
OCPractice[2321:60059] (
cat,
dog,
fish
)
- 将数组转换为字符串:
NSString *string1 = [array componentsJoinedByString:@"-"];
NSLog(string1);
输出如下:
OCPractice[2392:62176] apple-banana-pear