黑马程序员技术交流社区

标题: OC学习笔记15--Foundation之NSArray与NSMutableArray常用方法 [打印本页]

作者: wowthe1st    时间: 2015-8-6 14:51
标题: OC学习笔记15--Foundation之NSArray与NSMutableArray常用方法
适合有java和C基础的同学迅速了解OC

  1. #import <Foundation/Foundation.h>


  2. int main()
  3. {
  4.         NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
  5.         //数组几种创建方式:
  6.         NSArray *ary1,*ary2,*ary3;
  7.         // 由于NSArray对象是长度固定的,初始化时就必须赋值
  8.          ary1=[NSArray arrayWithObjects:
  9.         @"ary1",[NSNumber numberWithInteger:111],
  10.         [[[NSObject alloc] init] autorelease],@"over",nil];
  11.         // 将Cary转换成OCary
  12.         id cAry[]={@"ary2",[NSNumber numberWithInteger:222],
  13.         [[[NSObject alloc] init] autorelease],@"over"};
  14.         ary2=[NSArray arrayWithObjects:cAry count:4];
  15.         // @方式创建对象
  16.         ary3=@[@"ary3",[NSNumber numberWithInteger:333],
  17.         [[[NSObject alloc] init] autorelease],@"over"];
  18.        
  19.        
  20.         //数组几种遍历方式:
  21.         void (^enumAryBlock)(id,NSUInteger,BOOL *);
  22.         enumAryBlock=^(id obj,NSUInteger idx,BOOL *stop)
  23.         {
  24.                 NSLog(@"index=%d,ele=%@",idx,obj);
  25.                 if(idx==2) *stop=1;
  26.         };
  27.         // for循环遍历
  28.         int i;
  29.         for(i=0;i<[ary1 count];i++)
  30.         {
  31.                 BOOL stop=0;
  32.                 enumAryBlock([ary1 objectAtIndex:i],i,&stop);
  33.                 if(stop) break;
  34.         }
  35.        
  36.         //for each 遍历
  37.         for(id obj in ary2)
  38.         {
  39.                 BOOL stop=0;
  40.                 enumAryBlock(obj,[ary2 indexOfObject:obj],&stop);
  41.                 if(stop) break;
  42.         }
  43.         // 对象方法遍历
  44.         [ary2 enumerateObjectsUsingBlock:enumAryBlock];
  45.        
  46.        
  47.         // 创建一个长度可变的OC数组
  48.         NSMutableArray *mary=[NSMutableArray array];
  49.         // 将ary1中所有元素添加至mary
  50.         [mary addObjectsFromArray:ary1];
  51.         NSLog(@"mary=%@",mary);
  52.        
  53.         [mary removeObjectAtIndex:3];
  54.         // 交换下标 1和2元素的位置
  55.         [mary exchangeObjectAtIndex:1 withObjectAtIndex:2];
  56.         //  替换下标为0的元素
  57.         [mary replaceObjectAtIndex:0 withObject:@"replacement"];
  58.         NSLog(@"mary=%@",mary);
  59.        
  60.         [pool drain];
  61.         return 0;
  62. }
复制代码




概括:
        OC中集合只能存放OC对象
        NSArray为长度不可变数组,即无法进行增删改操作,不允许元素为空,
        其子类NSMutableString为长度可变,也不允许元素为空

NSArray 常用方法:
        注:为方便开发者,苹果官方为OC提供了许多编译器特性(语法糖),
                        如ARC、点语法、@方式创建对象、[index]方式访问OC数组等,
                        都为编译器特性,其本质是在编译过程中编译器为其添加必要的
                        代码或转换成调用相应方法进行处理;
        常用的创建方法:
                        //创建一个长度为0的OC数组,由于NSArray长度不可变,创建为0长度后
                        //就无法使用,所以该方法一般用于NSMutableArray
                + (id)array;
                //将动态个数的对象保存为一个数组,对象不能为空,
                //最后必须以nil结尾,表示数组结束,OC数组内存中最后一个元素之后存放0
                + (id)arrayWithObjects:(id)obj,...,nil;
                        //将存放OC对象的C数组转换成OC数组
                + (id)arrayWithObjects:(const id[])objs count:(NSUInteger)count;
        @创建方式:
                // 实质为调用对象创建的类方法创建,因此返回的也是autorelease过的
                //@开头创建的对象为不可变的NSArray
                NSArray ary= @[id,id,...];
       
        //返回数组长度
-(unsigned long)count;
        // 返回下标位置对象,也可以使用 ary[index]方式访问,实质也是调用该方法
-(id)objectAtIndex:(NSUInteger)index;
        // 返回对象所在下标
-(NSUInteger)indexOfObject:(id)obj;
        //是否包含
-(BOOL)containsObject:(id)obj;
         // 利用block遍历数组
-(void)enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop)block;


NSMutableArray 常用方法:
        // 将另一个OC数组中所有元素添加进来
-(void)addObjectsFromArray:(NSArray *)from;
-(void)addObject:(id)obj;
-(void)removeAllObjects;
-(void)removeObject:(id)obj;
-(void)removeObjectAtIndex:(NSUInteger)idx;
         //交换两个位置上的元素
-(void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
         // 替换某个位置上的元素
-(void)replaceObjectAtIndex:(NSUInteger)idx withObject:(id)obj;









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2