Published on

All iOS Design patterns you should know


Howdy, fellow iOS developer! Do you ever feel like your code is all over the place, like spaghetti on a plate? Well, don't worry, my friend, because there's a solution: design patterns!

Design patterns are like superheroes for your code. They're a set of solutions to common problems that make your code cleaner and more maintainable. And who doesn't want that, am I right?

Now, you might be thinking, "But there are so many design patterns out there, how can I possibly remember them all?" Don't worry, you don't have to. Just like how Batman fights crime in Gotham and Superman saves the world, each design pattern is designed to solve a specific problem. So, all you have to do is learn the ones that are most relevant to iOS development, and you'll be a design pattern superhero in no time!

So, without further ado, let's dive into the most commonly used design patterns for iOS:

Model-View-Controller (MVC)

This is a fancy term for separating the data from the user interface. It's like having a super organized closet, with all your clothes separated by type and color. In iOS, the UIViewController class is a great example of the MVC pattern in action. It acts as the controller, helping to organize and separate the code.


This is all about communication between objects. Think of it like passing notes in class, but way more efficient. In iOS, the UITableView class uses delegation to manage the display of cells in a table view. So, if you're ever working with tables, make sure to use delegation!

tableView.delegate = // some class that conform to UITableViewDelegate
tableView.datasource = // some class that conform to UITableViewDataSource


This pattern is all about having just one instance of a class, like having one and only one BFF. In iOS, singletons are often used to manage shared resources, like database connections or network sockets. The UIApplication class is a great example of the singleton pattern in action. It represents the app as a whole and ensures there's only one instance.

// change status bar background
UIApplication.shared.statusBarStyle = .lightContent


This pattern is like having a spy network, keeping track of everything that's going on. In iOS, the NotificationCenter class is a great example of the Observer pattern in action. It allows objects to register to receive notifications about specific events. So, if you need to keep track of changes to data or state, use the Observer pattern!

let notification = Notification(name: "some notification")


This pattern is all about creating objects. It's like having your own factory, but for code. In iOS, the UIView class has a factory method called view(with:owner:) that allows you to create a view from a nib file. This is great for creating objects that conform to a specific protocol or interface.

let nib = UINib(nibName: "nibFileName", bundle: nil)
let view = nib.instantiate(withOwner: self, options: nil).first as? UIView

And there you have it, folks! These are the most commonly used design patterns for iOS development. Make sure to use them wisely and your code will be super organized and easy to maintain. Don't forget to subscribe to learn more best practices and tips for iOS development!