【5练习】NSArray

//
//  main.m
//  nsarray
//
//  Created by 裴烨烽 on 14-1-30.
//  Copyright (c) 2014年 裴烨烽. All rights reserved.
//

#import <Foundation/Foundation.h>



//这个数组是不能添加元素的,只能在创建的同时赋值。
void arrayCreate(){
    //静态方法不需要管理内存
    NSArray *array= [NSArray array];  //这样创建是没有数组的,是创建空的数组
    array= [NSArray arrayWithObject:@"123"];//创建一个有1个元素的数组。
    array= [NSArray arrayWithObjects:@"1",@"2",@"3", nil];//这里是创建一个有多个元素的数组   //nil在这里表示是一个结束符
    
    
    
    //查询元素个数
    // int count=[array count];//用来计算数组内部有多少个元素
    
    //同上面等价
    int count =array.count;
    
    NSLog(@"%i",count);
    
    
    //
}


//数组的简单使用 查询
void arrayUse(){
    //判断字符数组中是否包含某元素
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    if([array containsObject:@"1"]){
        NSLog(@"包含了字符");
        
    }else
    {
        NSLog(@"不包含该字符");
    }
    
    
    //判断最后一个字符是什么
    NSString *last=[array lastObject];
    NSLog(@"last=%@",last);
    
    
    
    //根据某个索引值然后找到该位置的元素是什么
    NSString *str=[array objectAtIndex:1];
    NSLog(@"%@",str);
    
    
    //根据某个元素,查找到该元素的索引位置
    //如果是负数,那么就是查找不倒。
    int index=[array indexOfObject:@"2"];
    NSLog(@"index=%i",index);
    
    
    //或者有一种方式就是arrary1中既可以放元素,也可以放数组
    NSObject *obj=[[NSObject alloc] init];
    NSArray *array1=[NSArray arrayWithObjects:@"a",@"b",@"c",obj, nil];
    NSLog(@"%@",array1);
    
    
}

//数组内存管理
/*
 void arrayMemory(){
 Student *stu1=[[Student alloc]init];
 Student *stu2=[[Student alloc]init];
 Student *stu3=[[Student alloc]init];
 NSLog(@"stu1:%zi",[stu1 retainCount]);
 
 //当吧一个对象塞进数组中时,这个对象的计数器会加1;也就是说数组会对它做一次retain操作
 NSArray *array=[[NSArray alloc] initWithObjects:stu1,stu2,stu3, nil];
 NSLog(@"stu1:%zi",[stu1 retainCount]);
 NSLog(@"count=%zi",array.count);
 //数组被销毁的时候,会对内部的所有元素都做一次release操作;
 [array release];
 [stu1 release];
 [stu2 release];
 [stu3 release];
 
 
 }
 */

//给数组里面的元素发送消息
/*
void arrayMessage(){
    Student *stu1=[Student student];
    Student *stu2=[Student student];
    Student *stu3=[Student student];
    
    NSArray *array=[NSArray arrayWithObjects:stu1,stu2,stu3, nil];
    
    [array makeObjectsPerformSelector:@selector(test)];//使他里面的所有对象都调用某方法
    
}
*/

/*
 //判断比较两个数组
 void arrayequal(){
 //比较两个集合内容是否相同
 -(BOOL)isEqualToArray:(NSArray  *)otherArray
 //返回两个集合中第一个相同的对象元素
 -(id)firstObjectCommonWithArray:(NSArray *)otherArray
 //
 }
 
 */
//数组的遍历
void arrayFor(){
    
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    int count =array.count;
    for(int i=0;i<count;i++)
    {
        id obj=[array objectAtIndex:i];
        NSLog(@"%i-%@",i,obj);
    }
}
//快速遍历2
void arrayFor2(){
    
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    int i=0;
    for(id obj in array){
        NSLog(@"%i-%@",i,obj);
        i++;
    }

}


//快速遍历3
void arrayFor3(){
    
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    //每遍历一个元素都会调用一次block
    //利用指针修改外面bool变量值
    if(idx==1){
     *stop=YES;//传入一个stop指针让内部能进行修改
    }
    NSLog(@"%i-%@",idx,obj);
}];
}

//使用迭代器进行数组遍历
void arrayFor4(){
    
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
  //  NSEnumerator *enumerator=[array objectEnumerator];//获取数组的迭代器
  
    //反序迭代器,从尾部开始进行遍历
    NSEnumerator *enumerator=[array reverseObjectEnumerator];
    
    
    [enumerator nextObject];//取得下一个需要遍历的元素
    id obj=nil;
    while (obj=[enumerator nextObject]) {
        NSLog(@"obj=%@",obj);
    }
    
    
    
    //返回迭代器中的所有元素
   NSArray *array2=[enumerator allObjects];
    NSLog(@"array2:%@",array2);
    
    
    
    
}




int main(int argc, const char * argv[])
{
    
    @autoreleasepool {
        
        // arrayCreate();
        // arrayUse();
        // arrayMemory();
        //arrayMessage();
        arrayFor4();
    }
    return 0;
}

 

posted @ 2014-01-30 14:01  太过于漂流  阅读(412)  评论(0编辑  收藏  举报