A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© u37kl 中级黑马   /  2016-2-19 18:52  /  657 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#NSArray
1、OC数组和C语言数组区别:
1> C :只能存放相同数据类型,内存连续,数组的大小不能改变,数组中的内容可以改变。
2> OC:只能存放OC对象,不能存放非OC对象,内存连续,NSArray数组中的内容不能改变,数组的长度也不能改变。

2、创建NSArray数组:
1> NSArray *arr = [NSArray array];
2> NSArray *arr = [NSArray arrayWithObject: [Person new]];
3> NSArray *arr = [NSArray arrayWithObjects: @"a", @"b", @"c", nil];
4> NSArray *arr = [NSArray arrayWithArray:arr];
5> NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/zp3sss/DeskTop/a.plist"]; // 从文件中读取一个数组
6> NSArray *arr = [NSArray arrayWithContentsOfURL: [NSURL fileURLWithPath:@"/Users/zp3sss/DeskTop/a.plist"]];

3、常见NSArray方法:
1> NSUInteger a = arr.count; // 获取集合中元素个数
2> id d = [arr objectAtIndex:2]; // 获取某下标位置的值。
3> BOOL b = [arr containsObject:@"abc"]; // 判断数组是否包含某个元素。- (BOOL) containsObject:(id);
4> id d = [arr lastObject]; // 返回最后一个元素
5> id d = [arr firstObject]; // 返回第一个元素
6> NSUInteger a = [arr indexOfObject:@"abc"]; // 查找元素在数组中的位置
7> NSUInteger a = [arr indexOfObject:@"abc" inRange: NSMakeRange(3,10)]; // 在range范围内查找元素在数组中的位置

4、定义和方法NSArray数组的简化写法:
1> 定义格式:@[数组元素],访问数组格式:数组名[下标]。
    NSArray *arr1 = @[@"1", @"abc", [Person new], @4]; // // 这种方式定义的OC数组为NSArray;类型,不能使用NSMutableArray类型变量指向。
    NSString *str = arr1[1];

5、NSArray的链接和分割
1> - (NSString *) componentsJoinedByString:(NSString *); //将数组元素使用分割符链接成一个字符串。
    NSString *str = [arr componentsJoinedByString:@"-"];

2> - (NSArray *) componentsSeparatedByString:(NSString *); // 将字符串使用分隔符分割成一个NSArray数组。
    NSString *str = @"400-400-12580";
    NSArray *arr = [str componentsSeparatedByString:@"-"];

6、遍历NSArray数组
1>for循环+下标访问
    for(int i=0; i<arr.count; i++){
        NSLog(@"%@", arr[i]);
    }

2>增强for循环
    for(id str in arr){
        NSLog(@"%@", str);
    }

3>block代码块
    // obj:表示当前下标的数据
    // idx:当前循环的下标
    // stop:控制循环是否结束的开关,当赋值为YES是,表示结束遍历
    [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
   
        if(idx == 2)
        {
            *stop = YES; // 结束遍历。
        }else{
            NSLog(@"%ld,%@", idx, obj);
        }
    }];
7、NSArray排序问题:
1>使用- (NSArray *) sortedArrayUsingComparator:^(NSComparisonResult)(id obj1, id obj2);
    NSArray *arr = [NSArray arrayWithObjects:@"F", @"E", @"C", @"B", @"A", @"D", nil];
    NSArray *ass = [arr sortedArrayUsingComparator:^(id obj1, id obj2){ // 当代码块返回1时,两个元素交换,当代码块返回0、-1时,两个元素不交换。
        return [obj1 compare:obj2]; // 如果想要数组升序排序,则这样写
        //return [obj1 compare:obj2]; 如果想要数组降序排序,则这样写
    }];

2>使用- (NSArray *) sortedArrayUsingSelector:(SEL)sel;
    - (NSComparisonResult) sort:(NSString *) str{ // 扩展NSString类型的大小比较。
        return [self compare:str]; // 如果想要数组升序排序,则这样写.
        return [str compare:self]; // 如果想要数组降序排序,则这样写.
    }
    NSArray *arr = [NSArray arrayWithObjects:@"F", @"E", @"C", @"B", @"A", @"D", nil];
    NSArray *ass1 = [arr sortedArrayUsingSelector:@selector(sort:)];
    NSArray *ass2 = [arr sortedArrayUsingSelector:@selector(compare:)];


8、NSArray读写文件:
1>- (BOOL)writeToFile:(NSString *)文件路径 atomically:(BOOL)是否开启事务; // 写入方法
2>+ (instancetype)arrayWithContentsOfFile:(NSString *)文件路径; // 读取方法
3>一般将NSArray对象和NSDictionary对象中的数据保存在后缀名为plist的文件中,其实就是一个XML文件,以示图的方式显示内容,不在用标签了。
4>writeToFile方法的写入特点是,如果以存在同名同后缀名的文件,将其删除,创建新的文件。
    // NSArray和NSDictionary的两种读写格式(保存的xml格式文件中和保存到plist格式文件中)。
    BOOL b = [arr writeToFile:@"/Users/thinkpad/Desktop/a.plist" atomically:YES];
    BOOL b = [arr writeToFile:@"/Users/thinkpad/Desktop/a.xml" atomically:YES];
    BOOL b = [arr writeToURL: [NSURL fileURLWithPath:[@"/Users/thinkpad/Desktop/a.plist"] atomically:YES]];
    NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/thinkpad/Desktop/a.plist"];
    NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/thinkpad/Desktop/a.plist"];
    NSArray *arr = [NSArray arrayWithContentsOfURL: [NSURL fileURLWithPath:@"/Users/thinkpad/Desktop/a.plist"]];

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马