[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 manage
23 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];
 
 
 
posted @ 2014-11-24 19:08  HelloVoidWorld  阅读(348)  评论(0编辑  收藏  举报