zoukankan      html  css  js  c++  java
  • NSArray

    NSArray

    1、创建数组:

    NSArray *array = [NSArray array];    //通过array 这个静态方法可以快速创建一个空的数组。
    
    array = [NSArray arrayWithObject:@"123"];    //arrayWithObject: 静态方法 创建有1个元素的数组。
    
    array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
    //arrayWithObjects: 静态方法 创建有多个元素的数组。
    
    int count = [array count]; 
    //等价于: count = array.count; count方法用于获得数组元素个数。

    2、数组的简单使用:

    NSObject *obj = [[NSObject alloc] init];
    
    NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c" , obj, nil];
    //任何OC对象都可以放入OC数组中,如:obj。
    
    if ([array containsObject:@"a"]) {
    //containsObject: 方法用于判断array数组中是否包含了元素@"a",返回值为BOOL类型。
         NSLog(@"包含了字符串a");
    } 
    
    NSString *last = [array lastObject];    
    //lastObject 方法用于取出数组array中最后一个元素。
    
    NSString *str = [array objectAtIndex:1];    
    //objectAtIndex: 方法用于取出数组中索引所对应的元素。
    
    int index = [array indexOfObject:@"c"];    
    //indexOfObject: 方法用于得到数组中元素@"c"所对应的索引值(脚标)。
    
    -(NSUInteger)indexOfObject(id)anObject inRange:(NSRange)range 
    //这个方法是在range范围内查找指定元素的位置。
    
    -(BOOL)isEqualToArray(NSArray *)otherArray 
    //这个方法用来比较两个集合内容是否相同。
    
    -(id)firstObjectCommonWithArray(NSArray *)otherArray 
    //这个方法用来返回两个集合中第一个相同的对象元素。

    3、数组的内存管理:

    Student *stu1 = [[Student alloc] init];
    Student *stu2 = [[Student alloc] init];
    Student *stu3 = [[Student alloc] init];
    
    NSLog(@"stu1:%zi", [stu1 retainCount]);
    //retainCount 方法用来获得stu1这个对象的内存计数器的值。
    
    NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil]; //initWithObjects: 方法用来把对象stu1, stu2, stu3塞进数组中,当把一个对象塞进数组中时,这个对象的计数器会加1,也就是说数组会对它做一次retain操作。
    
    [stu1 release];
    [stu2 release];
    [stu3 release];
    [array release]; // 数组被销毁的时候,会对内部的所有元素都做一次release操作。

    4、给数组里面的元素发送消息:

    Student *stu1 = [[Student alloc] init];
    Student *stu2 = [[Student alloc] init];
    Student *stu3 = [[Student alloc] init];
    
    NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil];
    //arrayWithObjects: 方法用来把对象stu1, stu2, stu3塞进数组中。
    
    [array makeObjectsPerformSelector:@selector(test)];
    //makeObjectsPerformSelector:@selector() 方法让数组array里面的所有对象都调用test方法。
    
    [array makeObjectsPerformSelector:@selector(test2:) withObject:@"123"];
    //makeObjectsPerformSelector:@selector()withObject: 方法让数组array里面的所有对象都调用test2:方法并传递一个参数@"123";此方法只支持传一个参数;注:test2:是有有参数的方法。

    5、遍历数组:

    NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
    int count = array.count;//这样写可以让代码效率更高,count方法可以只调用一次。
    for (int i = 0; i<count; i++) 
    {
        // id类型 等价与 void *
        id obj = [array objectAtIndex:i];
    
        NSLog(@"%i-%@", i, obj);
    }
    
    //快速遍历:for-in 语法
    NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
    int i =0;
    for (id obj in array) 
    { //快速遍历,把array中的元素遍历一遍赋值给obj。
    
        NSLog(@"%i-%@", i, obj);//i作为array中的角标。
        i++;
    }
    
    //使用Block遍历数组(系统推荐使用):
    NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
    { NSLog(
    @"%i-%@", idx, obj); //enumerateObjectsUsingBlock: 方法是使用Block方式遍历一个数组array,每遍历到一个数组中的元素就会调用一次Block;obj、idx、*stop为三个参数,obj为当前遍历的数组中元素、idx为当前遍历数组中的元素索引、*stop为是否继续遍历数组的条件判断,当*stop = YES;时遍历停止。 if (idx == 1) {// 如果索引为1,就停止遍历 *stop = YES; // 利用指针修改外面BOOL变量的值 } }]; //通过迭代器遍历数组: NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; NSEnumerator *enumerator = [array objectEnumerator]; //获取数组的迭代器 NSEnumerator *enumerator = [array reverseObjectEnumerator]; //获取数组的反序迭代器(从尾部开始遍历元素) NSArray *array2 = [enumerator allObjects]; // allObjects 方法是只能取出没有被遍历过的元素对象。 NSLog(@"array2:%@", array2); id obj = nil; while (obj = [enumerator nextObject]) { //nextObject 方法用于获取下一个需要遍历的元素。 NSLog(@"obj=%@", obj); }

    6、派生出新的数组:

    NSArray *array = [NSArray arrayWithObjects:@"1", @"2", nil];
    NSArray *array2 = [array arrayByAddingObject:@"3"];
    //arrayByAddingObject: 方法用于在原来的数组array基础上添加新的对象(元素)生成一个新的数组array2。
    
    NSArray *array3 = [array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"4", @"5", nil]];
    //arrayByAddingObjectsFromArray: 方法 用于在原来数组array基础上添加一个新的数组[NSArray arrayWithObjects:@"4", @"5", nil]后生成一个新数组array3。
    
    NSArray *array4 = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
    NSRange range = NSMakeRange(1, 2);
    NSArray *array5 = [array4 subarrayWithRange:range];
    //subarrayWithRange: 方法按照指定范围range来截取数组array4中的元素形成新的数组。
    NSLog(@"array5:%@", array5);
    
    //注:array、array2、array3、array4、array5 五个数组皆为不可变数组,前后并没有变化仍是原来的数组。

    7、数组的其他用法:

    NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
    NSString *str = [array componentsJoinedByString:@"-"];
    //componentsJoinedByString: 方法 是利用分隔符-拼接数组array中所有的元素形成字符串@”1-2-3-4”。   
    
    NSString *path = @"/Users/apple/Desktop/array.xml";//字符串的形式指定一个路径。
    [array writeToFile:path atomically:YES];//writeToFile:(NSString *) atomically:(BOOL) 方法是将一个数组array按照路径path写入文件(生成的是一个xml文件),atomically:YES代表要进行原子性操作。
    
    path = @"/Users/apple/Desktop/array.txt";
    NSArray *array2 = [NSArray arrayWithContentsOfFile:path];
    //arrayWithContentsOfFile: 方法是从指定路径path文件中(文件有严格的格式要求XML格式)读取内容形成一个数组。

    NSMutableArray

    NSMutableArray *array = [NSMutableArray arrayWithObject:@"1"];//NSMutableArray 动态数组类型。
    [array addObject:@"2"];// 添加元素
    [array addObject:@"3"];
    
    [array removeObject:@"2"];//removeObject: 方法用于移除数组array中指定的元素@"2"。
    [array removeLastObject];//removeLastObject 方法用于移除数组array中最后一个元素。
    [array removeAllObjects];//removeAllObjects 方法用于移除数组array中的所有元素。
    
    NSMutableArray *models = [NSMutableArray arrayWithCapacity:20]; 
    // arrayWithCapacity 方法用于给数组分配容量。
    
    -(void)setArray:(NSArray *)otherArray     //设置集合元素。
    -(void)addObjectsFromArray:(NSArray *)otherArray    //添加otherArray数组的全部元素到集合中。
    
    -(void)insertObject:(id)anObject atIndex:(NSUInteger)index    //在index位置插入一个元素。
    -(void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes    //在indexes指定的位置分别插入objects数组中的元素。
    
    -(void)removeObjectAtIndex:(NSUInteger)index    //删除index位置的元素。
    -(void)removeObjectsAtIndexes:(NSIndexSet *)indexes    //删除indexes位置的所有元素。
    -(void)removeObject:(id)anObject inRange:(NSRange)range    //在range范围内查找特定的元素进行删除。
    -(void)removeObjectsInArray:(NSArray *)otherArray    //删除同时存在于otherArray和当前集合中的所有元素。
    -(void)removeObjectsInRange:(NSRange)range    //删除range范围内的所有元素。
    
    -(void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject    //用anObject替换index位置对应的元素。
    -(void)replaceObjectsAtIndexes:(NSIndexSet *)indexes withObjects:(NSArray *)objects //用objects数组中的元素分别替换indexes对应位置的元素。
    
    -(void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray range:(NSRange)otherRange
    //用otherArray数组中otherRange范围内的元素替换当前集合range范围内的元素。
    
    -(void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray    //用otherArray数组中的元素替换当前集合range范围内的元素。
    
    -(void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2    //交换idx1和idx2位置的元素。
    
    //下面三个排序方法的用法参考NSArray的排序。
    -(void)sortUsingDescriptors:(NSArray *)sortDescriptors;
    -(void)sortUsingComparator:(NSComparator)cmptr;
    -(void)sortUsingSelector:(SEL)comparator;
    //例下:
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1", @"3", @"2", nil];
    [array sortUsingSelector:@selector(compare:)];    
    NSLog(@"%@", array);

       注:OC中数组和字典只能存储OC对象不能存放基本数据类型。

     

  • 相关阅读:
    Oracle优化器:星型转换
    Latches and Tuning:Buffer Cache
    [转]Oracle销售人员普遍腐败?
    Veritas ODM Async and Oracle
    How to set LOGSOURCE PATHMAP on GoldenGate
    Merry Christmas Sql Statement
    Goldengate OGG常见问题与错误列表
    Sqlserver 2005 配置 数据库镜像:1418错误:该错误很可能是安全方面的配置问题引起的
    Sqlserver 2005 配置 数据库镜像:为镜像准备镜像数据库 (TransactSQL)
    Sqlserver 2005 配置 数据库镜像:概述
  • 原文地址:https://www.cnblogs.com/CJDog/p/5125116.html
Copyright © 2011-2022 走看看