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
)

 
原文地址:https://www.cnblogs.com/liuxiaokun/p/5544812.html