• Foundation



    /*
    * NSArray :不可变数组
    * NSMutableArray : 可变数组
    */

    /*
    *生成数组,添加与删除元素。
    */
    void mutableArray()
    {
      NSMutableArray *array = [NSMutableArray arrayWithObjects:@"jim", nil];
      // 每添加一个新元素到数组中,都会对这个元素做一次retain操作
      // 每删除一个元素,都会对这个元素做一次release
      // 当数组被销毁的时候,数组中的所有元素都会做一次release
      [array addObject:@"jack"];
      [array addObject:@"mike"];
    }

    /*
    *数组的读取
    */
    void arrayImport()
    {
      NSArray *array = [NSArray arrayWithContentsOfFile:@"/Users/apple/Desktop/array.txt"];

      [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%zd - %@", idx, obj);
      }];
    }

    /*
    *数组元素写入文件
    */
    void arrayExport()
    {
      /* 字符串写入文件:
      NSString *str = @"3424324fsdfdsfdsfsdfsdf";
      [str writeToFile:@"/Users/apple/Desktop/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
      */
      1.
      NSArray *array = [NSArray arrayWithObjects:@"哈哈哈", @"adsad", @"的方式发生地方", nil];
      [array writeToFile:@"/Users/apple/Desktop/test.txt" atomically:YES];
      2.
      //NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/array.txt"];
      //[array writeToURL:url atomically:YES];
    }


    /*
    *数组元素按行读取
    */
    void arrayString2()
    {
      NSString *str = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/mj.txt"   encoding:NSUTF8StringEncoding error:nil];
      // 解析出文件中的每一行内容
      NSArray *array = [str componentsSeparatedByString:@" "];

      [array enumerateObjectsUsingBlock:
      ^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"第%zd行的内容:%@", idx, obj);
      }];
    }

    /*
    * 数组 和 字符串 的相互转换:
    */
    void arrayString()
    {
      NSString *str = @"mike-jack-rose-jim";

      // 利用中划线 - 来分割字符串
      NSArray *array = [str componentsSeparatedByString:@"-"];
      NSLog(@"%@", array);

      // 把数组中的所有元素用*连接成一个新的字符串
      NSString *str2 = [array componentsJoinedByString:@"*"];
      NSLog(@"str2=%@", str2);
    }

    /*
    * 数组的内存管理
    */
    void arrayMemory()
    {
      // p1 : 1
      Person *p1 = [[Person alloc] init];
      p1.age = 11;
      // p2 : 1
      Person *p2 = [[Person alloc] init];
      p2.age = 12;

      // 每当有一个对象被添加到NSArray中时,会对这个对象做一次retain操作
      // p1 : 2
      // p2 : 2
      // array : 1
      NSArray *array = [[NSArray alloc] initWithObjects:p1, p2, nil];

      // p1 : 1
      [p1 release];

      // 当数组(NSArray)对象被销毁的时候,会对内部存储的所有对象做一次release操作
      // array : 0
      // p1 : 0
      // p2 : 1
      [array release];

      // p2 : 0
      [p2 release];
    }

    /*
    * 数组遍历
    */
    void arrayFor()
    {
      NSArray *array = [NSArray arrayWithObjects:@"mike", @"jack", @"rose", @"jake", nil];

      // 1.最土的方式
      /*
      for (int i = 0; i<array.count; i++) {
        id obj = [array objectAtIndex:i];
        NSLog(@"%d-%@", i, obj);
      
        if (i == 2) break;
      }*/

      // 2.快速遍历
      // 每次遍历都取出元素赋值给obj
      /*
      for (id obj in array)
      {
        NSLog(@"%@", obj);
      }*/

      // 3.利用block遍历数组
      // 当数组每遍历一个元素时,就会调用一次block,而且每次传入的参数值都不一样
      [array enumerateObjectsUsingBlock:
      // id obj : 元素
      // NSUInterger idx : 索引、位置、角标
      ^(id obj, NSUInteger idx, BOOL *stop)
      {
        NSLog(@"idx=%zd, obj=%@", idx, obj);
        if (idx == 1)
        {
          // 停止遍历
          *stop = YES;
        }
      }];



      // block遍历底层原理:
      //    void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
      //    {
      //      NSLog(@"%ld - %@", idx, obj);
      //
      //
      //      if (idx == 0)
      //      {
      //        // 停止遍历
      //        *stop = YES;
      //      }
      //    };
      //
      //    for (int i = 0; i<array.count; i++)
      //    {
      //      // 用来标记是否需要停止遍历
      //      BOOL isStop = NO;
      //
      //      // 取出元素
      //      id obj = array[i];
      //
      //      myblock(obj, i, &isStop);
      //
      //
      //      if (isStop)
      //      {
      //        break;
      //      }
      //    }


    }

    /*
    * 数组的创建
    */
    void arrayCreate()
    {
      // NSArray只能放OC对象,不能直接存放基本数据类型(比如int、struct、enum等),也不能存放nil值。
      // 这个array永远是空数组
      // NSArray *array = [NSArray array];

      // 1.这个数组对象永远只有1个元素:@“mike”
      //NSArray *array = [NSArray arrayWithObject:@"mike"];
      // nil是数组元素结束的标记
      NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];

      NSArray *array = [NSArray arrayWithObjects:p, @"jack", @"mike", @"jim", nil];

      // 快速创建一个NSArray对象
      NSArray *array4 = @[@"jack", @"rose", @"4324324"];

      // 2.返回元素个数
      NSLog(@"count=%zd", [array count]);

      // 3.NSArray中元素的访问
      NSLog(@"%@", [array objectAtIndex:1]);
      NSLog(@"%@", array[0]);
    }

    /*
    * NSMutableArray - 可变数组的基本使用
    */
    void use3()
    {
      NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];

      // 添加元素
      [array addObject:[[Person alloc] init]];

      [array addObject:@"jack"];

      // 删除元素
      //[array removeAllObjects];
      // 删除指定的对象
      // [array removeObject:@"jack"];
      [array removeObjectAtIndex:0];

      // 错误写法
      // [array addObject:nil];

      NSLog(@"%@", array);

      NSLog(@"%ld", array.count);
    }

  • 相关阅读:
    汉诺塔
    给出一个字符串,要求插入最少的字符,使得原字符串为一个回文串
    最长回文子串
    回文数 第N个回文数
    屋子里有1到100号100盏关闭的灯
    无头结点的单链表删除一个中间结点
    单链表逆转
    编程之美2.21 加法
    在一个数组中找 差值最大的两个数 差值最小的两个数 推广到 点对
    斐波那契
  • 原文地址:https://www.cnblogs.com/tzktzk1/p/3329670.html
Copyright © 2020-2023  润新知