二、IOS SDK详解之NSArray/NSMutableArray


转载自:http://blog.csdn.net/hello_hwc/article/details/42714719

前言:本文会首先讲一下本人使用NSArray的几个小技巧,然后详解下常用的属性和方法。

一 NSArray/NSMutableArray简介

   NSArray存储的是一组对象的数组,这些对象是有序的,NSArray内容不可改变,如果需要可改变的使用NSMutableArray,它是NSArray的子类,在Cocoa touch中处于Core Service层。当然,也可以继承NSArray来自定义自己的数组,不过这种情况极少,这里不做讲解。通常如果需要Array的其他,创建类别(category足矣)

继承关系:NSArray->NSObject

遵循协议: NSCopying,NSFastEnumeration,NSObject,NSMutableCopying,NSSecureCoding

  NSMutableArray继承自NSArray。

继承关系:NSMutableArray->NSArray->NSObject

遵循协议:NSCopying,NSFastEnumeration,NSObject,NSMutableCopying,NSSecureCoding

二 使用NSArray的小技巧

2.1 快捷创建符号@[]

例如

[plain]  view plain copy
  1. NSArray *array = @[@“1",@"2",@"3"];  

2.2 firstObject:安全返回第一个元素

取NSArray有两种方式,用array[0]在数组为空的时候会报错,用[array firstObject]即使数组为空,也不会报错,会返回nil

同理lastObject也一样,


2.3 makeObjectsPerformSelector:withObject: 和makeObjectsPerformSelector:让每个数组内元素都执行某个SEL,这样写就不必再写个for语句了


2.4 KVC的方式取值,做计算

例如有个数组:

[objc]  view plain copy
  1.   NSArray * array = @[  
  2.                     @{@"name":@"hwc",  
  3.                       @"count":@(10),  
  4.                       @"url":@"blog.csdn.net/hello_hwc"  
  5.                       },  
  6.                     @{@"name":@"baidu",  
  7.                       @"count":@(20),  
  8.                       @"url":@"www.baidu.com"  
  9.                       },  
  10.                     @{@"name":@"google",  
  11.                       @"count":@(22),  
  12.                       @"url":@"www.google.com"  
  13.                       }  
  14.                     ];  
  15. NSArray * nameArray = [array valueForKeyPath:@"name"];  
  16. NSNumber *sum = [array valueForKeyPath:@"@sum.count"];  
  17. NSNumber *max = [array valueForKeyPath:@"@max.count"];  
  18. NSNumber *min = [array valueForKeyPath:@"@min.count"];  
  19. NSLog(@"NameArray:%@",nameArray.description);  
  20. NSLog(@"Sum:%@",sum.description);  
  21. NSLog(@"max:%@",max.description);  
  22. NSLog(@"min:%@",min.description);  

输出

[objc]  view plain copy
  1. HwcFoundationExample[1048:42991] NameArray:(  
  2.     hwc,  
  3.     baidu,  
  4.     google  
  5. )  
  6. 2015-01-12 14:10:45.357 HwcFoundationExample[1048:42991] Sum:52  
  7. 2015-01-12 14:10:45.357 HwcFoundationExample[1048:42991] max:22  
  8. 2015-01-12 14:10:45.357 HwcFoundationExample[1048:42991] min:10  

三 NSArray常用属性方法详解

为了更加直观,通过一个例子来展示,常用的使用属性和方法几乎都可以从例子中找到。

NSArray例子

[objc]  view plain copy
  1. //初始化(Initializing an array)  
  2.     NSArray * array = [[NSArray alloc] initWithObjects:@"first",@"thrid",@"Second", nil nil];  
  3.     //查找(Querying an array)  
  4.     NSString * toFindString = @"Second";  
  5.     if ([array containsObject:toFindString]) {  
  6.         NSUInteger index = [array indexOfObject:toFindString];  
  7.         NSLog(@"%@ index is %lu",toFindString,index);  
  8.     }  
  9.     NSString * firstObject = [array firstObject];  
  10.     NSString * lastObject = [array lastObject];  
  11.     if (firstObject!=nil) {  
  12.         NSLog(@"First object is:%@",firstObject);  
  13.     }  
  14.     if (lastObject!=nil) {  
  15.         NSLog(@"LastObject object is:%@",lastObject);  
  16.     }  
  17.     //排序(Sort)  
  18.     NSArray * anotherArray = @[@"1",@"4",@"3"];  
  19.     NSArray * sortedArrayWithSEL = [array sortedArrayUsingSelector:@selector(localizedCompare:)];  
  20.     NSArray * sortedArrayWithComparator = [anotherArray sortedArrayUsingComparator:^NSComparisonResult(id obj1id obj2) {  
  21.         NSString * str1 = obj1;  
  22.         NSString * str2 = obj2;  
  23.         if (str1.integerValue > str2.integerValue) {  
  24.             return NSOrderedDescending;  
  25.         }  
  26.         if (str1.integerValue < str2.integerValue) {  
  27.             return NSOrderedAscending;  
  28.         }  
  29.         return NSOrderedSame;  
  30.     }];  
  31.       
  32.     if ([sortedArrayWithComparator isEqualToArray:sortedArrayWithSEL]) {  
  33.         NSLog(@"The array is same");  
  34.     }  
  35.     else{  
  36.         NSLog(@"The array is not same");  
  37.     }  
  38.     //与文件进行操作(Working with file)  
  39.     //如果存在则读到数组里,如果不存在则写到文件里(If exist read,else write to file)  
  40.     NSFileManager * defaultManager = [NSFileManager defaultManager];  
  41.     NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  42.     NSString * documentDirectory = [paths firstObject];  
  43.     NSString * fileName = @"TestArray.plist";  
  44.     NSString * filePath = [documentDirectory stringByAppendingPathComponent:fileName];  
  45.     BOOL fileExist = [defaultManager fileExistsAtPath:filePath];  
  46.     if (fileExist) {  
  47.         //从文件读取  
  48.         NSArray * readArray = [NSArray arrayWithContentsOfFile:filePath];  
  49.         //遍历  
  50.         [readArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOLBOOL *stop) {  
  51.             if ([obj isKindOfClass:[NSString class]]) {  
  52.                 NSString * str = obj;  
  53.                 NSLog(@"At index:%lu is %@",idx,str);  
  54.                 if ([str isEqualToString:@"thrid"]) {  
  55.                     *stop = YES;  
  56.                 }  
  57.             }  
  58.         }];  
  59.     }else{  
  60.         [anotherArray writeToFile:filePath atomically:YES];  
  61.     }  
NSMutableArray

[objc]  view plain copy
  1. //(初始化)Init  
  2. NSMutableArray* mutableArray = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"4", nil nil];  
  3. //(添加对象)Add object  
  4. [mutableArray addObject:@"5"];  
  5. [mutableArray insertObject:@"1" atIndex:0];  
  6. //(删除对象)Remove object  
  7. [mutableArray removeObject:@"3"];  
  8. [mutableArray removeObjectAtIndex:0];  
  9. [mutableArray removeLastObject];  
这段代码第一次运算输出

[plain]  view plain copy
  1. 2015-01-14 19:48:46.499 HwcNSArrayExample[509:7777] Second index is 2  
  2. 2015-01-14 19:48:46.501 HwcNSArrayExample[509:7777] First object is:first  
  3. 2015-01-14 19:48:46.501 HwcNSArrayExample[509:7777] LastObject object is:Second  
  4. 2015-01-14 19:48:46.502 HwcNSArrayExample[509:7777] The array is not same  
第二次运算输出

[plain]  view plain copy
  1. 2015-01-14 19:49:31.135 HwcNSArrayExample[525:8151] Second index is 2  
  2. 2015-01-14 19:49:31.135 HwcNSArrayExample[525:8151] First object is:first  
  3. 2015-01-14 19:49:31.136 HwcNSArrayExample[525:8151] LastObject object is:Second  
  4. 2015-01-14 19:49:31.136 HwcNSArrayExample[525:8151] The array is not same  
  5. 2015-01-14 19:49:31.136 HwcNSArrayExample[525:8151] At index:0 is 1  
  6. 2015-01-14 19:49:31.137 HwcNSArrayExample[525:8151] At index:1 is 4  
  7. 2015-01-14 19:49:31.137 HwcNSArrayExample[525:8151] At index:2 is 3  

注意,在使用writeToFile的时候,Array中的对象类型可以是

NSString,NSData,NSDate,NSNumber,NSArray,NSDictionary

不可以是其他类型的对象

至于完整的属性和方法,见官方文档,还是那句话,一定要能看懂官方文档。

转载自:http://blog.csdn.net/hello_hwc/article/details/42714719

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值