博客
关于我
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/

    你可能感兴趣的文章
    VS2003 Front Page Server Extension
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
    查看>>
    OpenCV与AI深度学习 | 基于YoloV8的药丸/片剂类型识别
    查看>>
    OpenCV与AI深度学习 | 基于YOLO和EasyOCR从视频中识别车牌
    查看>>
    OpenCV与AI深度学习 | 基于图像处理的火焰检测算法(颜色+边缘)
    查看>>
    OpenCV与AI深度学习 | 基于拉普拉斯金字塔实现图像融合(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 基于改进YOLOv8的景区行人检测算法
    查看>>
    OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
    查看>>
    OpenCV与AI深度学习 | 基于深度学习的轮胎缺陷检测系统
    查看>>
    OpenCV与AI深度学习 | 如何使用YOLO-World做目标检测
    查看>>
    OpenCV与AI深度学习 | 如何使用YOLOv9分割图像中的对象
    查看>>
    OpenCV与AI深度学习 | 如何使用YOLOv9检测图片和视频中的目标
    查看>>
    OpenCV与AI深度学习 | 如何在 Docker 容器中使用 GPU
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | YOLO11自定义数据集训练实现缺陷检测 (标注+训练+预测 保姆级教程)
    查看>>
    OpenCV与AI深度学习 | 实战 | YOLOv10模型微调检测肾结石并提高准确率
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV确定对象的方向(附源码)
    查看>>