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

附加:经测试在AppCode中写代码,用Java/C++的方式(点运算符)来调用OC对象方法,编辑器也会给出代码提示和自动补全,并自动转换为OC的语法格式(然而Xcode不支持),JetBrains牛逼!

posted @ 2020-02-11 16:43  BN-Juan  阅读(104)  评论(0编辑  收藏  举报