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

    你可能感兴趣的文章
    Objective-C实现列主元Gauss消去法(附完整源码)
    查看>>
    Objective-C实现列主元高斯消去法(附完整源码)
    查看>>
    Objective-C实现创建一个链表和打印该链表算法(附完整源码)
    查看>>
    Objective-C实现创建多级目录(附完整源码)
    查看>>
    Objective-C实现删除文件中的指定内容(附完整源码)
    查看>>
    Objective-C实现删除文本文件空行(附完整源码)
    查看>>
    Objective-C实现删除重复的字母字符算法(附完整源码)
    查看>>
    Objective-C实现判断32位的数字是否为正数isPositive算法(附完整源码)
    查看>>
    Objective-C实现判断A数组是否为B数组的子集(附完整源码)
    查看>>
    Objective-C实现判断IP4地址是否有效算法(附完整源码)
    查看>>
    Objective-C实现判断一个数是否为krishnamurthy数的算法(附完整源码)
    查看>>
    Objective-C实现判断一个数是否为质数算法(附完整源码)
    查看>>
    Objective-C实现判断三角形的类型(附完整源码)
    查看>>
    Objective-C实现判断位是不是偶数isEven算法(附完整源码)
    查看>>
    Objective-C实现判断字符串是否包含特殊字符算法(附完整源码)
    查看>>
    Objective-C实现判断字符串是否回文palindrome算法(附完整源码)
    查看>>
    Objective-C实现判断数是否为质数(附完整源码)
    查看>>
    Objective-C实现判断整数是否为2的幂isPowerOfTwo算法(附完整源码)
    查看>>
    Objective-C实现判断是否为回文字符串(附完整源码)
    查看>>
    Objective-C实现判断是否为回文数算法(附完整源码)
    查看>>