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);
}

原文地址:https://www.cnblogs.com/tzktzk1/p/3329670.html