博客
关于我
iOS开发:不可变数组和可变数组的区别分析(NSArray / NSMutableArray)
阅读量:114 次
发布时间:2019-02-27

本文共 2816 字,大约阅读时间需要 9 分钟。

Object-C 中不可变数组与可变数组的对比

在 iOS 开发中,数组是非常常用的数据结构。Object-C 中提供了两种主要的数组类:NSArrayNSMutableArray。本文将从基础到应用,详细介绍这两种数组的特性及其使用方法。


一、NSArray(不可变数组)

NSArray 是一个静态数组,无法修改其内容,也无法添加或删除元素。其核心特性是 不可变性。以下是 NSArray 的常用使用方法:

1. 初始化方式
  • 创建空数组

    • NSArray *array = [NSArray alloc] init];
    • NSArray *array = [NSArray new];
    • NSArray *array = [NSArray array];
  • 创建包含单一元素的数组

    NSArray *array = [NSArray arrayWithObject:@"12345”];
  • 创建包含多个元素的数组

    NSArray *array = [NSArray arrayWithObjects:@“123”,@“456”,@“789”,@“abc”,@“def”,nil];
  • 简化写法

    NSArray *array = @[@“12345”]; // 等价于 ②
  • 从文件或 URL 中读取数组

    NSArray *array = [NSArray arrayWithContentsOfFile:@“路径”];  NSArray *array = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:@“URL”]];
  • 2. 获取数组元素个数
    NSUInteger count = array.count; // 或者:NSInteger count = [array count];
    3. 访问数组元素
    // 访问数组中的元素NSString *string = [array objectAtIndex:0];  // 遍历数组for (int i = 0; i < array.count; i++) {  NSLog(@"数组第 %d 个元素:%@", i, [array objectAtIndex:i]);}
    4. 操作数组元素
    // 添加元素(生成新数组)NSArray *newArray = [array arrayByAddingObject:@“ghi”];  // 添加多个元素NSArray *newArray = [array arrayByAddingObjectsFromArray:array];  // 将数组转换为字符串NSString *string = [newArray componentsJoinedByString:@”,”];
    5. 根据字符串操作数组
    NSString *string = @“123+456+789”;NSArray *array = [string componentsSeparatedByString:@“+”];  // 反之,将数组拼接成字符串NSArray *array = @[@"1”, @"2”, @"4”, @"3”];NSString *string = [array componentsJoinedByString:@"/”];

    二、NSMutableArray(可变数组)

    NSMutableArrayNSArray 的子类,具有 可变性,即可以对数组中的元素进行添加、删除、替换等操作。以下是 NSMutableArray 的常用使用方法:

    1. 初始化方式
  • 创建空数组

    • NSMutableArray *mArray = [NSMutableArray new];
    • NSMutableArray *mArray = [NSMutableArray array];
  • 创建包含多个元素的数组

    NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@“1”,@“2”,@“3”,@“4”,@“5”,nil];
  • 从文件或 URL 中读取数组

    NSMutableArray *mArray = [NSMutableArray arrayWithContentsOfFile:@“路径”];  NSMutableArray *mArray = [NSMutableArray arrayWithContentsOfURL:[NSURL URLWithString:@“URL”]];
  • 指定容量

    NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:10];
  • 2. 增加数组元素
  • 在末尾添加元素

    [mArray addObject:@“7”];
  • 插入指定位置的元素

    [mArray insertObject:@“def” atIndex:2];
  • 替换指定位置的元素

    [mArray replaceObjectAtIndex:3 withObject:@“adc”];
  • 删除元素

    [mArray removeObject:@“4”];  [mArray removeObjectAtIndex:5];  [mArray removeLastObject];  [mArray removeAllObjects];
  • 3. 快速遍历数组
    for (NSString *object in mArray) {  NSLog(@“%@”,object);}
    4. 常用函数
  • 指定容量创建数组

    +(id)arrayWithCapacity:(NSInteger)size;
  • 初始化数组

    -(id)initWithCapacity:(NSInteger)size;
  • 添加元素

    -(void)addObject:(id)object;
  • 插入元素

    -(void)insertObject:(id)object atIndex:(NSInteger)aIndex;
  • 替换元素

    -(void)replaceObject:(id)object atIndex:(NSInteger)aIndex;
  • 删除元素

    -(void)removeObject:(id)object;
  • 删除所有元素

    -(void)removeAllObjects;
  • 排序方法

    -(void)sortUsingSelector:(SEL)selector;

  • 总结

    NSArrayNSMutableArray 在 iOS 开发中的应用场景有明显区别。NSArray 因其不可变性,适用于数据不可变的场景;而 NSMutableArray 则适用于需要频繁修改数据的应用。选择使用哪种数组类型取决于具体需求。

    转载地址:http://yslf.baihongyu.com/

    你可能感兴趣的文章
    pm2通过配置文件部署nodejs代码到服务器
    查看>>
    PML调用PDMS内核命令研究
    查看>>
    PMM安装-第一篇
    查看>>
    PMP知识要点(第九章)
    查看>>
    PNETLab 镜像包官方下载太慢?不急,最新版本PNET_4.2.10分享!
    查看>>
    POCO库中文编程参考指南(4)Poco::Net::IPAddress
    查看>>
    Quartz基本使用(二)
    查看>>
    POC项目安装与使用指南
    查看>>
    Podman核心技术详解
    查看>>
    pods 终端安装 第三方框架的一些命令
    查看>>
    Podzielno
    查看>>
    PoE、PoE+、PoE++ 三款交换机如何选择?一文带你了解
    查看>>
    PoE三种标准:标准 PoE、PoE+、PoE++,网络工程师必知!
    查看>>
    POI 的使用
    查看>>
    poi 读取单元格为null者空字符串
    查看>>
    poi-tl简介与文本/表格和图片渲染
    查看>>
    pointnet分割自己的点云数据_PointNet解析
    查看>>
    POI实现Excel导入Cannot get a text value from a numeric cell
    查看>>
    POI实现Excel导入时提示NoSuchMethodError: org.apache.poi.util.POILogger.log
    查看>>
    POI实现Excel导出时常用方法说明
    查看>>