Sorting an NSMutableArray with Custom Objects in Objective-C

Sorting an NSMutableArray with Custom Objects in Objective-C

22 May 2024 Stephan Petzl Leave a comment Tech-Help

Sorting an NSMutableArray containing custom objects can be a common requirement in iOS development. This guide will walk you through various methods to achieve this, particularly focusing on sorting by a property of the custom object, such as a date.

Using the Compare Method

One effective way to sort your NSMutableArray is by implementing a compare method in your custom class. Here’s an example:

- (NSComparisonResult)compare:(Person *)otherObject {
    return [self.birthDate compare:otherObject.birthDate];

NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)];

This method is efficient and concise, allowing you to easily compare properties directly within your custom class.

Using NSSortDescriptor

NSSortDescriptor offers a more flexible approach, especially when sorting by multiple keys. Here’s how you can use it:

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"birthDate" ascending:YES];
NSArray *sortedArray = [drinkDetails sortedArrayUsingDescriptors:@[sortDescriptor]];

NSSortDescriptor is advantageous because it allows you to define your sort order using data rather than code, making it easier to manage and modify.

Sorting with Blocks

Starting with iOS 4 and Mac OS X 10.6, you can use blocks to sort your arrays. This method is not only modern but also very readable:

NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingComparator:^NSComparisonResult(Person *a, Person *b) {
    return [a.birthDate compare:b.birthDate];

Blocks provide a clean and powerful way to sort arrays, especially when dealing with complex sorting logic.

Performance Considerations

The -compare: and block-based methods are generally faster than using NSSortDescriptor because they avoid the overhead of Key-Value Coding (KVC). However, NSSortDescriptor offers greater flexibility and ease of use, especially when dealing with user interfaces like NSTableView.


Choosing the right method to sort an NSMutableArray with custom objects depends on your specific needs and performance considerations. The compare method and blocks offer speed and simplicity, while NSSortDescriptor provides flexibility and ease of use for complex sorting requirements.

Enhancing Your Development Workflow with Repeato

While sorting custom objects is a key aspect of iOS development, ensuring the quality and reliability of your application is paramount. This is where Repeato comes into play. Repeato is a no-code test automation tool for iOS and Android that allows you to create, run, and maintain automated tests for your apps efficiently.

With Repeato, you can focus more on developing your application rather than spending excessive time on test creation and maintenance. Its computer vision and AI-based approach make it particularly fast to edit and run tests, enabling even non-technical team members to participate in the testing process.

To learn more about how Repeato can streamline your development workflow, visit our blog and documentation pages.

Like this article? there’s more where that came from!