zoukankan      html  css  js  c++  java
  • NSArray

    对象方法:  

    1.常用遍历方法:

        // 使用OC数组的迭代器来遍历
        // 每取出一个元素就会调用一次block
        // 每次调用block都会将当前取出的元素和元素对应的索引传递给我们
        // obj就是当前取出的元素, idx就是当前元素对应的索引
        // stop用于控制什么时候停止遍历
        [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            if (idx == 1) {
                *stop = YES;
            }
            NSLog(@"obj = %@, idx = %lu", obj, idx);
        }];

    2.调用OC数组的方法让数组中所有的元素都执行指定的方法:

        Person *p1 = [Person new];
        Person *p2 = [Person new];
        Person *p3 = [Person new];
        Person *p4 = [Person new];
        NSArray *arr = @[p1, p2, p3, p4];

        第一种方式:
        [arr enumerateObjectsUsingBlock:^(Person *obj, NSUInteger idx, BOOL *stop) {
            [obj say];
        }];
      

        第二种方式:
        // 如果使用OC数组存储对象, 可以调用OC数组的方法让数组中所有的元素都执行指定的方法
        // 注意点: 如果数组中保存的不是相同类型的数据, 并且没有相同的方法, 那么会报错
        [arr makeObjectsPerformSelector:@selector(say)];
        

        第三种方式:
        // withObject: 需要传递给调用方法的参数
        [arr makeObjectsPerformSelector:@selector(sayWithName:) withObject:@"lnj"];

    3.排序:

        NSArray *arr = @[@10, @20, @5, @7, @15];
        NSLog(@"排序前: %@", arr);
        // 注意: 想使用compare方法对数组中的元素进行排序, 那么数组中的元素必须是Foundation框架中的对象, 也就是说不能是自定义对象
        NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
        NSLog(@"排序后: %@", newArr);

        自定义对象中的某个属性排序:

        Person *p1 = [Person new];
        p1.age = 10;
        
        Person *p2 = [Person new];
        p2.age = 20;
        
        Person *p3 = [Person new];
        p3.age = 5;
        
        Person *p4 = [Person new];
        p4.age = 7;
        
        NSArray *arr = @[p1, p2, p3, p4];
        NSLog(@"排序前: %@", arr);
        // 按照人的年龄进行排序
        // 不能使用compare:方法对自定义对象进行排序
        //    NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
        
        // 该方法默认会按照升序排序
        NSArray *newArr = [arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
            // 每次调用该block都会取出数组中的两个元素给我们
            // 二分
            NSLog(@"obj1 = %@, obj2 = %@", obj1, obj2);
            //return obj1.age > obj2.age;//升序
            return obj1.age < obj2.age;//降序
            
    //        if (obj1.age > obj2.age) {
    //            // 5 4
    //            return NSOrderedDescending;
    //        }else if(obj1.age < obj2.age)
    //        {
    //            // 4 5
    //            return NSOrderedAscending;
    //        }else
    //        {
    //            return NSOrderedSame;
    //        }
            
        }];
        NSLog(@"排序后: %@", newArr);

    4.数组--文件读写:

        // 1.将数组写入到文件中
        NSArray *arr = @[@"lnj", @"lmj", @"jjj"];
        // 其实如果将一个数组写入到文件中之后, 本质是写入了一个XML文件
        // 在iOS开发中一般情况下我们会将XML文件的扩展名保存为plist

        //注意:writeToFile只能写入数组中保存的元素都是Foundation框架中的类创建的对象, 如果保存的是自定义对象那么不能写入
        BOOL flag = [arr writeToFile:@"/Users/xiaomage/Desktop/abc.plist" atomically:YES];
        NSLog(@"flag = %i", flag);


        // 2.从文件中读取一个数组
        /*
        NSArray *newArray = [NSArray arrayWithContentsOfFile:@"/Users/xiaomage/Desktop/abc.plist"];
        NSLog(@"%@", newArray);
        */

    5.可变数组 插入(一组数据):

        NSRange range = NSMakeRange(2, 2);
        NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];
        // 插入一组数据, 指定数组需要插入的位置, 和插入多少个
        [arrM insertObjects:@[@"A", @"B"] atIndexes:set];

    6.集合对象的内存管理

            /*
            // 1. 如果将一个对象添加到一个数组中, 那么数组会对对象进行一个retain
            Person *p = [Person new];
            NSLog(@"reatinCount = %lu", [p retainCount]);
            NSMutableArray *arrM = [[NSMutableArray alloc] init];
            
            [arrM addObject:p];
            NSLog(@"reatinCount = %lu", [p retainCount]);
            
            [p release];
            NSLog(@"reatinCount = %lu", [p retainCount]);
            // 当数组对象释放之后, 会给数组中所有的对象发送一条release消息
            [arrM release];
             */
            
            Person *p = [Person new]; // 1
            NSLog(@"reatinCount = %lu", [p retainCount]);
            NSMutableArray *arrM = [[NSMutableArray alloc] init];
            [arrM addObject:p]; // 2
            NSLog(@"reatinCount = %lu", [p retainCount]);
            
            [p release]; // 1
            // 当数组移除一个对象之后, 会给这个对象发送一条release消息
            [arrM removeObject:p];

    7.字符分解成数组

    NSArray *arr = [str componentsSeparatedByString:@"#"];

    8.是否包含某个元素

    // 取出模型
        XMGDeal *deal = self.deals[indexPath.row];
        if ([self.deletedDeals containsObject:deal]) {
            [self.deletedDeals removeObject:deal];
        } else {
            [self.deletedDeals addObject:deal];
        }

     

  • 相关阅读:
    熊逸吴军武志红万维钢薛兆丰等得到专栏书34本,5星1本,4星12本
    2星|罗大伦《道德经说什么》:比熊逸《道可道》李零《人往低处走》差很多
    樊登力荐的《道德经说什么》,比熊逸《道可道》差两颗星
    Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
    使用Vue-cli 脚手架生成的项目使用Vetur+ Prettier + ESlint的配置设置代码规范和格式
    URL中的hash(井号)
    Redis集群的部署
    Redis用作分布式锁
    Redis 概述安装
    简单的Asp.net core管道模拟
  • 原文地址:https://www.cnblogs.com/jingdizhiwa/p/5387146.html
Copyright © 2011-2022 走看看