【OC】NSArray和NSMutableArray

NSArray和NSMutableArray是Objective-C中用于存储一组对象的两个常用类。NSArray是不可变的数组类,一旦创建后,其内容无法被修改。NSMutableArray是可变的数组类,允许动态地添加、删除和修改数组内容。

本篇博客笔者讲解了NSArray和NSMutableArray方法的使用总结以及对深浅拷贝的总结.

下面是一个示例代码,演示了它们的一些常见方法和功能:

1. 常见使用方法讲解

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 创建一个不可变数组
        NSArray *immutableArray = @[@"Apple", @"Banana", @"Cherry"];
        NSLog(@"Immutable Array: %@", immutableArray);

        // 获取数组元素数量
        NSUInteger count = [immutableArray count];
        NSLog(@"Number of elements in Immutable Array: %lu", (unsigned long)count);

        // 获取数组中的元素
        NSString *firstElement = [immutableArray objectAtIndex:0];
        NSLog(@"First element: %@", firstElement);

        // 检查数组是否包含某个对象
        if ([immutableArray containsObject:@"Banana"]) {
            NSLog(@"Immutable Array contains 'Banana'");
        }

        // 创建一个可变数组
        NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:immutableArray];
        NSLog(@"Mutable Array: %@", mutableArray);

        // 添加元素到可变数组
        [mutableArray addObject:@"Date"];
        NSLog(@"Updated Mutable Array: %@", mutableArray);

        // 插入元素到可变数组
        [mutableArray insertObject:@"Grapes" atIndex:2];
        NSLog(@"Inserted Mutable Array: %@", mutableArray);

        // 替换元素
        [mutableArray replaceObjectAtIndex:0 withObject:@"Apricot"];
        NSLog(@"Replaced Mutable Array: %@", mutableArray);

        // 移除元素
        [mutableArray removeObject:@"Cherry"];
        NSLog(@"Removed Mutable Array: %@", mutableArray);

        // 移除所有元素
        [mutableArray removeAllObjects];
        NSLog(@"Emptied Mutable Array: %@", mutableArray);
    }
    return 0;
}

这段代码演示了如何创建、操作和处理NSArray和NSMutableArray的对象。不可变数组一旦创建后无法更改,而可变数组可以进行各种修改操作。这些数组类提供了丰富的方法,以满足不同的数组操作需求。现在让我解释代码中使用的关键方法和功能:

  1. 不可变数组 (NSArray):

    • 创建不可变数组:使用@[@"object1", @"object2"][NSArray arrayWithObjects:@"object1", @"object2", nil]
    • 获取数组元素数量:使用[array count]
    • 获取数组中的元素:使用[array objectAtIndex:index]
    • 检查数组是否包含对象:使用[array containsObject:@"object"]
  2. 可变数组 (NSMutableArray):

    • 创建可变数组:使用[NSMutableArray arrayWithArray:immutableArray]
    • 添加元素:使用[mutableArray addObject:@"newObject"]
    • 插入元素:使用[mutableArray insertObject:@"newObject" atIndex:index]
    • 替换元素:使用[mutableArray replaceObjectAtIndex:index withObject:@"newObject"]
    • 移除元素:使用[mutableArray removeObject:@"object"]
    • 移除所有元素:使用[mutableArray removeAllObjects]

当处理NSArray和NSMutableArray时,还有一些其他常见方法和知识点可以考虑:

  1. 遍历数组:

    • 使用快速枚举(Fast Enumeration)来遍历数组,这是一种简便的方式,例如:
      for (NSString *item in mutableArray) {
          NSLog(@"Item: %@", item);
      }
      
  2. 排序数组:

    • 对数组进行排序,可以使用- (NSArray *)sortedArrayUsingSelector:(SEL)comparator 方法或使用- (void)sortUsingSelector:(SEL)comparator方法,前者返回一个新的排好序的数组,后者在原数组上进行排序。
  3. 数组的深拷贝和浅拷贝:

    • 使用- (id)copy- (id)mutableCopy 方法来进行深拷贝和浅拷贝。深拷贝会创建一个新的数组,包含相同元素的副本,而浅拷贝只会创建一个新的引用,指向原始数组。
  4. 不同数据类型的元素:

    • NSArray和NSMutableArray可以包含不同类型的对象,但最好保持数组中的元素类型一致,以便更容易处理。
  5. 使用NSArray的初始化方法:

    • 除了NSArrayNSMutableArray类方法创建数组之外,还可以使用- (instancetype)initWithObjects:(id) firstObject, ...- (instancetype)initWithArray:(NSArray *)array等初始化方法来创建数组。
  6. NSArray和NSMutableArray的性能:

    • 在大型数据集上进行频繁的插入和删除操作时,NSMutableArray通常会更高效,因为它们允许修改。不可变数组NSArray通常在读取时更高效,因为它们不需要支持修改操作。
  7. 数组中的nil值:

    • NSArray和NSMutableArray可以包含nil值,但在处理时需要小心处理nil值的情况,以避免潜在的崩溃。

2. 深浅拷贝总结:

    1. NSArray和NSMutableArray中,copy方法对于不可变数组和可变数组都执行浅拷贝,
    而mutableCopy方法对于不可变数组和可变数组都执行深拷贝。因此,在需要创建独立的数组副本时,通常使用mutableCopy方法。
    2. copy返回的都是可变不可变数组 - 那么对NSMutableArray执行copy时,返回的仍然是浅拷贝的不可变数组,但是改变原数组,新的数组仍然会跟着改变,即使它本身是不可变的mutableCopy方法返回的都是可变数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值