首页 > 代码库 > [OC Foundation框架 - 7] NSArray的创建与遍历

[OC Foundation框架 - 7] NSArray的创建与遍历

 NSArray是不可变的,不能先创建再添加元素

NSArray可以放入任何OC对象,但不能放入基本数据类型、结构体、枚举等非OC对象
不能存储nil
 
A.常用方法1
  1. 创建
  2. 返回用量
  3. 是否含有某元素
  4. 最后的元素
  5. 取得某位置的元素
当一个对象放入数组的时候,这个对象的计数器加1
 1 #pragma mark create a array 2 void arrayCreate() 3 { 4     //Create an empty array 5     NSArray *array = [NSArray array]; 6     7     //Create an array with one element 8     array = [NSArray arrayWithObject:@"123"]; 9    10     array = [NSArray arrayWithObjects:@"a", @"b", @"d", nil];11    12     NSUInteger count =[array count];13     NSLog(@"%@", count);14    15     [array release];16 }

最后的nil用作标示数组的结束,不会被存储进数组元素,不允许在其他地方插入
error:    array = [NSArray arrayWithObjects:@"anil, @"d"];

 1 #pragma mark common use 2 void arrayUser() 3 { 4     NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil]; 5     if ([array containsObject:@"a"]) 6     { 7         NSLog(@"Contans a"); 8     } 9    10     NSString *last = [array lastObject];11     NSLog(@"%@", last);12    13     NSString *str = [array objectAtIndex:1];14     NSLog(@"%@", str);15    16     NSUInteger location = [array indexOfObject:@"c"];17     NSLog(@"%@", location);18    19     [array release];20 }21 22 #pragma memory manage23 void memoryManage()24 {25     Student *stu1 = [[Student alloc] init];26     Student *stu2 = [[Student alloc] init];27     Student *stu3 = [[Student alloc] init];28    29     NSLog(@"stu1: %zi", [stu1 retainCount]);30    31     NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil];32    33     NSLog(@"stu1: %zi", [stu1 retainCount]);34    35     [stu1 release];36     [stu2 release];37     [stu3 release];38    39     [array release];40    41 }
 
B.常用方法2
 
1.给数组所有元素发送消息,调用同一个方法
 1 void arrayMessage() 2 { 3     Student *stu1 = [[Student alloc] init]; 4     Student *stu2 = [[Student alloc] init]; 5     Student *stu3 = [[Student alloc] init]; 6     7     NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil]; 8     9     [array makeObjectsPerformSelector:@selector(test2:) withObject:@"test2"];10    11     [stu1 release];12     [stu2 release];13     [stu3 release];14    15     [array release];16 } 
 
2.遍历
(1)for 循坏
 1 void arrayLoop() 2 { 3     Student *stu = [[Student alloc]init]; 4     NSArray *array = [[NSArray alloc] initWithObjects:stu, @"2", @"3", nil]; 5     unsigned long count = array.count; 6 //    for (int i=0; i<count; i++) 7 //    { 8 //        id obj = [array objectAtIndex:i]; 9 //        NSLog(@"%i - %@", i, obj);10 //    }11    12     int i = 0;13     for (id obj in array)14     {15         NSLog(@"%i - %@", i, obj);16         i++;17     }18    19     [stu release];20     [array release];21 }
 
(2)使用Block进行循环处理
 1 void arrayLoopByBlock() 2 { 3     Student *stu = [[Student alloc]init]; 4     NSArray *array = [[NSArray alloc] initWithObjects:stu, @"2", @"3", nil]; 5     6     7     [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 8         NSLog(@"%zi - %@", idx, obj); 9         if (idx == 1)10         {11             *stop = YES;12         }13     }];14    15     [stu release];16     [array release];17 }
 
(3).迭代器
 1 void arrayLoopByEnumerator() 2 { 3     Student *stu = [[Student alloc]init]; 4     NSArray *array = [[NSArray alloc] initWithObjects:stu, @"2", @"3", nil]; 5     6 //    NSEnumerator *e = [array objectEnumerator]; 7     NSEnumerator *e = [array reverseObjectEnumerator]; 8     id obj = nil; 9     while (obj = [e nextObject])10     {11         NSLog(@"The element is %@", obj);12     }13    14     [stu release];15     [array release];16 }
创建整数数组
(1)
    
1      NSArray *array61 = [NSArray arrayWithObjects:@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, nil];
实际上是把数字自动转化成了NSNumber类型
 
 
(2)不能用于NSMutableArray
        
1 NSArray *array61 = @[@0, @1, @2, @3, @4, @5, @6, @7, @8, @9];
 
 
 

[OC Foundation框架 - 7] NSArray的创建与遍历