• NSArray


    一、NSArray.h文件
        1、    IOS  
     /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h
        2、 mac 
     /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSArray.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSArray.h

    一、NSArray 介绍

    NSArray是不可变的,NSMutableArray是可变的,而且只能储存Object-c对象,另外,数组的最后一个元素一定是《nil》表示结束.
    这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,int, float, double, BOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是cocoa对象,可以被保存在集合类中。

    【1】、在创建NSArray数组时,使用nil表示数组元素的结束,这个是必须的,你可以尝试不加nil,在运行时会出现异常。nil在NSArray中的特殊用处也说明了为什么不能将nil作为数组中的元素来存储;
    【2】、创建可变使用NSMutableArray时用到了arrayWithCapacity:5指定了数组的容量,这个容量值只是为了Cocoa能够对其它进行一定的优化,并不是用其限定死数组的容量大小。


    二、NSArray  功能细分

    1、排序,遍历,比较(block块,自定义块,推荐) 

    2、创建,增(插入),移除,替换,截取 , 查询,过滤

    3、 文件|网络地址数据操作(读写)

     

    三、实例

    1、- (NSUInteger)count; 数组元素个数      
    NSArray * array;
    array = [NSArray arrayWithObjects:@"one", @"two", nil];
    NSLog(@"%lu", [array count]);
    2013-03-07 09:10:09.610 NSStringDemo[851:303] 2

    2、- (id)objectAtIndex:(NSUInteger)index;返回指定索引的数组元素
    NSLog(@"%@", [array objectAtIndex:[array count] - 2]);
    2013-03-07 09:10:09.613 NSStringDemo[851:303] one

    3、- (NSArray *)arrayByAddingObject:(id)anObject;追加对象
    NSLog(@"%@", [array arrayByAddingObject:@"demo"]);
    2013-03-07 10:16:59.831 NSStringDemo[1196:303] (
        one,
        two,
        demo
    )

    4、- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;  追加其他数组
    NSLog(@"%@", [array arrayByAddingObjectsFromArray:array]);
    2013-03-07 10:16:59.832 NSStringDemo[1196:303] (
        one,
        two,
        one,
        two
    )

    5、- (NSString *)componentsJoinedByString:(NSString *)separator; 分割数组为字符串
    NSLog(@"%@", [array componentsJoinedByString:@","]);
    2013-03-07 10:19:18.054 NSStringDemo[1218:303] one,two

    6、- (BOOL)containsObject:(id)anObject;  判断数组是否存在指定元素
    NSLog(@"%@", [array containsObject:@"one"]? @"YES" : @"NO");
    2013-03-07 22:05:24.151 NSStringDemo[665:303] YES

    7、- (NSString *)description; 格式化为一个属性列表
    NSLog(@"%@", [array description]);
    2013-03-07 22:27:14.740 NSStringDemo[881:303] (
        one,
        two,
        three
    )


    8、- (NSString *)descriptionWithLocale:(id)locale;本地化格式化为一个属性列表
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"一",@"one" @"二",@"two" @"三",@"three",nil];
    NSLog(@"%@", [array descriptionWithLocale: dic]);
    2013-03-07 22:28:30.465 NSStringDemo[896:303] (
        one,
        two,
        three
    )


    9、- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;本地化格式化为一个属性列表(设置缩进)
    NSLog(@"%@", [array descriptionWithLocale:dic indent:2]);
    2013-03-07 22:28:30.484 NSStringDemo[896:303]         (
                one,
                two,
                three
            )


    10、- (id)firstObjectCommonWithArray:(NSArray *)otherArray; 取出array对象跟demo对象第一个交集元素

    NSArray *demo = [[[NSArray alloc] initWithObjects: @"three", @"two", nil] autorelease];
    NSLog(@"%@", [array firstObjectCommonWithArray:demo]);
    2013-03-08 10:27:00.884 NSStringDemo[676:303] two
     

    1、- (void)getObjects:(id __unsafe_unretained [])objects;获取指定区域对象,容易内存泄露


    NSArray *mArray = [[NSArray alloc] initWithObjects:@"demoOne", @"demoTwo", @"demoThree", nil];
    id *objects;
    NSRange range= NSMakeRange(1, 2);
    objects = malloc(sizeof(id) * range.length);
    [mArray getObjects:objects range:range];
    NSLog(@"%@", objects[1]);
    free(objects);


    2013-03-11 20:24:29.299 NSStringDemo[616:303] demoThree 



    2、- (void)addObject:(id)anObject;  添加对象


    3、- (void)insertObject:(id)anObject atIndex:(NSUInteger)index; 指定索引位置插入对象

    4、- (void)removeLastObject;移除最后一个对象

    5、- (void)removeObjectAtIndex:(NSUInteger)index;移除指定索引位置对象

    6、- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;替换指定索引位置对象



    NSMutableArray *demoMutableArray = [[[NSMutableArray alloc] initWithObject:@"demoOne"] autorelease];
    [demoMutableArray addObject:@"demoTwo"];
    NSLog(@"%@", demoMutableArray);
    [demoMutableArray insertObject:@"demoThree" atIndex:2];
    NSLog(@"%@", demoMutableArray);
    [demoMutableArray removeLastObject];
    NSLog(@"%@", demoMutableArray);
    [demoMutableArray removeObjectAtIndex:0];
    [demoMutableArray replaceObjectAtIndex:0 withObject:@"demoOne"];
    NSLog(@"%@", demoMutableArray);


    2013-03-11 21:45:22.890 NSStringDemo[1043:303] (
        demoOne,
        demoTwo
    )
    2013-03-11 21:45:22.892 NSStringDemo[1043:303] (
        demoOne,
        demoTwo,
        demoThree
    )
    2013-03-11 21:45:22.893 NSStringDemo[1043:303] (
        demoOne,
        demoTwo
    )
    2013-03-11 21:45:22.894 NSStringDemo[1043:303] (
        demoOne
    )

     

    1、- (void)addObjectsFromArray:(NSArray *)otherArray; 追加数组A到数组B

    NSMutableArray * demoMutableArray = [[NSMutableArray alloc] initWithObjects:@"January", @"February", @"March", nil];
    NSMutableArray * demoTwoMutableArray = [NSMutableArray arrayWithObject:@"April"];
    [demoMutableArray  addObjectsFromArray:demoTwoMutableArray];
    NSLog(@"%@", [demoMutableArray description]);


    2013-03-12 19:15:00.212 NSStringDemo[719:303] (
        January,
        February,
        March,
        April
    )



    2、- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2; 交互指定索引之间的对象


    [demoMutableArray exchangeObjectAtIndex:1 withObjectAtIndex:3];
    NSLog(@"%@", [demoMutableArray description]);

    2013-03-12 20:25:53.897 NSStringDemo[923:303] (
        January,
        April,
        March,
        February
    )

    3、- (void)removeAllObjects; 销毁数组
    [demoMutableArray removeAllObjects];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:27:14.495 NSStringDemo[971:303] (
    )


    4、- (void)removeObject:(id)anObject inRange:(NSRange)range;移除指定区域指定对象.根据对象isEqual消息判断。
    [demoMutableArray removeObject:@"March" inRange:NSMakeRange(1, 3)];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:29:00.084 NSStringDemo[1038:303] (
        January,
        April,
        February
    )




    5、- (void)removeObject:(id)anObject;移除指定对象
    [demoMutableArray removeObject:@"April"];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:30:35.239 NSStringDemo[1089:303] (
        January,
        February
    )


    6、- (void)removeObjectIdenticalTo:(id)anObject inRange:(NSRange)range;移除指定区域指定对象,根据对象的地址判断
    [demoMutableArray removeObjectIdenticalTo:@"April" inRange:NSMakeRange(0, 3)];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:32:14.013 NSStringDemo[1134:303] (
        January,
        March,
        February
    )




    7、- (void)removeObjectIdenticalTo:(id)anObject;移除指定对象
    [demoMutableArray removeObjectIdenticalTo:@"January"];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:39:55.732 NSStringDemo[1188:303] (
        March,
        February
    )


    8、- (void)removeObjectsFromIndices:(NSUInteger *)indices numIndices:(NSUInteger)cnt NS_DEPRECATED(10_0, 10_6, 2_0, 4_0);移除指定索引之间的对象
    NSUInteger  i = 0;
    NSUInteger  u = 2;
    [demoMutableArray removeObjectsFromIndices:&i numIndices:u];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:44:19.076 NSStringDemo[1322:303] (
    )




    9、- (void)removeObjectsInArray:(NSArray *)otherArray;移除数组A包含的指定数组B元素
    [demoMutableArray removeObjectsInArray:demoTwoMutableArray];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:46:06.652 NSStringDemo[1376:303] (
        January,
        March,
        February
    )


    10、- (void)removeObjectsInRange:(NSRange)range;移除指定区域所有对象
    [demoMutableArray removeObjectsInRange:NSMakeRange(1, 2)];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:47:16.458 NSStringDemo[1410:303] (
        January
    )




    11、- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray range:(NSRange)otherRange;指定(数组B的指定区域)的元素替换(数组A指定区域)

    NSMutableArray * demoThreeMutableArray = [NSMutableArray arrayWithObjects:@"May", @"June",  @"July", nil];
    [demoMutableArray replaceObjectsInRange:NSMakeRange(1, 3) withObjectsFromArray:demoThreeMutableArray range:NSMakeRange(2, 1)];
    NSLog(@"%@", [demoMutableArray description]);
    2013-03-12 20:58:04.211 NSStringDemo[1688:303] (
        January,
        July
    )




    12、- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray;指定数组B替换(数组A指定区域)的元素
    [demoMutableArray replaceObjectsInRange:NSMakeRange(1, 1) withObjectsFromArray:demoThreeMutableArray];
    NSLog(@"%@", [demoMutableArray description]);
            return 0;
    }2013-03-12 20:58:04.211 NSStringDemo[1688:303] (
        January,
        May,
        June,
        July
    )

     

    13、- (void)setArray:(NSArray *)otherArray;指定数组B替换A
    NSMutableArray * demoMutableArray = [NSMutableArray arrayWithObjects:@"January", @"February", @"March",  nil];
    NSArray *demoArray = [NSArray arrayWithObjects:@"April", @"May",  nil];
    [demoMutableArray setArray:demoArray];
    NSLog(@"%@", demoMutableArray);
    2013-03-14 08:27:02.297 NSStringDemo[639:303] (
        April,
        May
    )


    14、- (void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context; 指定方法升序比较


    15、- (void)sortUsingSelector:(SEL)comparator;指定方法升序比较


    16、- (void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes; 指定索引集合插入数组元素
    [demoMutableArray insertObjects:demoArray atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(3, 2)]];
    NSLog(@"%@", demoMutableArray);
    2013-03-14 08:37:44.107 NSStringDemo[763:303] (
        January,
        February,
        March,
        April,
        May
    )


    17、- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes; 移除指定索引集合元素
    [demoMutableArray removeObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)]];
    NSLog(@"%@", demoMutableArray);
    2013-03-14 08:39:25.053 NSStringDemo[812:303] (
        April,
        May
    )


    18、- (void)replaceObjectsAtIndexes:(NSIndexSet *)indexes withObjects:(NSArray *)objects; 替换指定索引集合的数组元素
    [demoMutableArray replaceObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 2)] withObjects:demoArray];
    NSLog(@"%@", demoMutableArray);
    2013-03-14 08:44:29.244 NSStringDemo[1071:303] (
        January,
        April,
        May
    )


    19、- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx NS_AVAILABLE(10_8, 6_0); 指定索引替换新的数组元素
    [demoMutableArray setObject:demoArray atIndexedSubscript:3];
    NSLog(@"%@", demoMutableArray);
    2013-03-14 08:46:45.696 NSStringDemo[1161:303] (
        January,
        April,
        May,
            (
            April,
            May
        )
    )


    20、- (void)sortUsingComparator:(NSComparator)cmptr NS_AVAILABLE(10_6, 4_0); 指定块方法排序数组元素
    NSMutableArray * demoThreeArray = [[[NSMutableArray alloc] initWithObjects:@"23", @"3", @"13", nil] autorelease];
    [demoThreeArray sortUsingComparator: ^(id objOne, id objTwo) {
        NSInteger intOne = [objOne integerValue];
        NSInteger intTwo = [objTwo integerValue];
               if (intOne> intTwo) {
                    return (NSComparisonResult)NSOrderedDescending;
                }

                if (intOne < intTwo) {
                    return (NSComparisonResult)NSOrderedAscending;
                }
                return (NSComparisonResult)NSOrderedSame;
           }];
          NSLog(@"%@", demoThreeArray);
    2013-03-14 09:01:55.568 NSStringDemo[1493:303] (
        3,
        13,
        23
    )


    21、- (void)sortWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr NS_AVAILABLE(10_6, 4_0);指定块比较数组
    [demoThreeArray sortWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(id objOne, id objTwo) {
                NSInteger intOne = [objOne integerValue];
                NSInteger intTwo = [objTwo integerValue];
                if (intOne> intTwo) {
                    return (NSComparisonResult)NSOrderedAscending;
                }

                if (intOne < intTwo) {
                    return (NSComparisonResult)NSOrderedDescending;
                }
                return (NSComparisonResult)NSOrderedSame;
            }];
            NSLog(@"%@", demoThreeArray);
    2013-03-14 09:05:50.176 NSStringDemo[1583:303] (
        23,
        13,
        3
    )


    22、+ (id)arrayWithCapacity:(NSUInteger)numItems; 初始化化数组对象容量


    23、- (id)initWithCapacity:(NSUInteger)numItems;初始化化数组对象容量

    NSMutableArray *demoOneCapacity = [NSMutableArray arrayWithCapacity:3];
    [demoOneCapacity addObject:@"demoOne"];
    NSMutableArray *demoTwoCapacity = [[[NSMutableArray alloc] initWithCapacity:3] autorelease];
    [demoTwoCapacity addObject:@"demoTwo"];
    NSLog(@"%@ --- %@", demoOneCapacity, demoTwoCapacity);
    2013-03-14 09:11:59.373 NSStringDemo[1743:303] (
        demoOne
    ) --- (
        demoTwo
    )

     
  • 相关阅读:
    Eclipse背景颜色修改
    Android动画效果translate、scale、alpha、rotate详解
    代理上网的方法
    ubuntu系统使用SSH免密码登陆
    Git的思想和基本工作原理
    GitHub详细教程
    Ubuntu和Redhat(Debian)的差别
    T2: 一种能累积计算积分的EC2实例类型
    win server 2008 r2 iis+php 500错误内部服务器错误。
    从OTF字体文件里查找字体名称
  • 原文地址:https://www.cnblogs.com/liuxiaokun/p/5544812.html
Copyright © 2020-2023  润新知