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

    你可能感兴趣的文章
    postgresql 函数&存储过程 ; 递归查询
    查看>>
    PostgreSQL 分组聚合查询中 filter 子句替换 case when
    查看>>
    PostgreSQL 同步流复制锁瓶颈分析
    查看>>
    PostgreSQL 备份与还原命令 pg_dump
    查看>>
    Postgresql 外部表插件postgres_fdw的安装和使用
    查看>>
    PostgreSQL 如何从崩溃状态恢复(上)
    查看>>
    PostgreSQL 存储过程基本语法
    查看>>
    PostgreSQL 实现批量更新、删除、插入
    查看>>
    PostgreSQL 导入 .gz 备份文件
    查看>>
    PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
    查看>>
    PostgreSQL 新增数据返回自增ID
    查看>>
    postgresql 更新多列数据
    查看>>
    PostgreSQL 服务启动后停止
    查看>>
    PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
    查看>>
    PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
    查看>>
    Qt开发——简易调色板QPalette
    查看>>
    PostgreSQL-解决连接时遇到的乱码问题
    查看>>
    PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
    查看>>
    PostgreSQL9.1 双机部署配置(主备数据同步)
    查看>>
    Qt开发——简易网络浏览器(一)
    查看>>