In Objective-C, NSArray
and NSMutableArray
are fundamental collection classes used for storing and manipulating ordered lists of objects. Understanding these classes is crucial for effective Objective-C programming.
NSArray
is an immutable array class in Objective-C. Once created, its contents cannot be modified. This immutability makes it thread-safe and efficient for storing fixed collections of objects.
NSArray *fruits = @[@"Apple", @"Banana", @"Orange"];
NSArray *numbers = [NSArray arrayWithObjects:@1, @2, @3, nil];
You can access elements using index notation or methods:
id firstFruit = fruits[0];
id lastNumber = [numbers lastObject];
NSUInteger count = [fruits count];
NSMutableArray
is a subclass of NSArray
that allows modification of its contents after creation. It's ideal for situations where you need to add, remove, or replace objects in the array.
NSMutableArray *mutableFruits = [NSMutableArray arrayWithObjects:@"Apple", @"Banana", nil];
NSMutableArray *emptyArray = [NSMutableArray array];
You can add, remove, or replace objects in an NSMutableArray
:
[mutableFruits addObject:@"Orange"];
[mutableFruits insertObject:@"Mango" atIndex:1];
[mutableFruits removeObjectAtIndex:0];
[mutableFruits replaceObjectAtIndex:1 withObject:@"Grape"];
NSArray
is immutable, while NSMutableArray
is mutable.NSArray
is generally more efficient for read-only operations.NSArray
is inherently thread-safe due to its immutability.Both classes support various operations:
filteredArrayUsingPredicate:
sortedArrayUsingSelector:
or sortedArrayUsingComparator:
enumerateObjectsUsingBlock:
NSArray
when you don't need to modify the array's contents.NSMutableArray
when you need to frequently add or remove elements.NSMutableArray
in multi-threaded environments.Understanding the differences and appropriate use cases for NSArray
and NSMutableArray
is essential for efficient Objective-C data management. These classes form the backbone of many Objective-C applications, providing powerful tools for organizing and manipulating collections of objects.