# ioscoachfrank.com > AI-optimized mirror of ioscoachfrank.com containing 50 pages totalling 39,801 words of clean markdown content, structured data, and semantic HTML. Original source: https://ioscoachfrank.com/. Last updated: 2026-06-12T11:59:15.832Z. Each page is available as HTML (with JSON-LD structured data) and Markdown (text-only, ideal for LLMs and RAG). ## Homepage - [Composition in Swift and iOS](/content/site-root.html) (208 words) ## Articles & Blog Posts - [reusable-view-controllers-html.html](/content/reusable-view-controllers-html.html) (1 words) - [_“Favor composition over inheritance”_](/content/composition-in-swift-html.html): Composition is tough. Learn how to do it well. (1,892 words) - [Keeping Your Network Layer Clean With DRY](/content/dry-network-layer-html.html): Nearly every app interacts with a server on the web, and often more than one. You’d think that we all take great care of our network layer and make sure it e... (2,077 words) - [There are many ways to get data from one controller to another. However, like most things in software development, some ways are better than others.](/content/viewcontrollercommunication/index.html) (313 words) - [NSOperations Overview](/content/nsoperations/index.html) (440 words) - [Last time, we looked at how to define the requests in our network layer in a way that keeps our code clean.](/content/decoding-typesafe-resources-html.html): Last time, we looked at how to define the requests in our network layer in a way that keeps our code clean. But that was only half of the problem. Let's see ... (1,301 words) - [This is part 1 in a 5-part series on [NSOperation & Transformers.](/content/operations/index.html)](/content/operations/index.html) (737 words) - [## Learn the foundational concepts for correctly using Grand Central Dispatch](/content/gcd_workshop/index.html) (221 words) - [UICollectionViewLayout Overview](/content/collectionviewlayout/index.html) (287 words) - [Online workshops with Frank](/content/workshops/index.html) (197 words) - [Welcome!](/content/code_of_conduct/index.html) (760 words) - [Whenever you start a new project in Xcode](/content/remove-main-storyboard-html.html): If you start a new project and you're planning on building your UI in code, you'll need to remove Main.storyboard. Here are the steps to do it correctly on i... (797 words) - [Learn the foundational concepts for correctly using Grand Central Dispatch](/content/workshops/gcd-workshop-html.html): Learn the foundational concepts for correctly using Grand Central Dispatch (242 words) - [Is Accessibility Really Worth it? YES!](/content/workshops/a11y-workshop-html.html): Is Accessibility Really Worth it? YES! (249 words) - [Hi there!](/content/about/index.html) (243 words) - [It’s no secret: **poorly built software is expensive to maintain.**](/content/training/index.html) (252 words) - [What prompted you to seek out training?](/content/training_questionnaire/index.html) (55 words) - [If there’s any reason in particular that made you unsubscribe, I’d love to hear it. Your feedback is important to me 🙃](/content/unsubscribe/index.html) (32 words) - [Name](/content/info/index.html) (217 words) - [Dealing with Massive View Controllers](/content/smaller_view_controllers/index.html) (261 words) - [I love talking about NSOperations, and I hope you got a lot out of it!](/content/cocoaheadsmtl2017/index.html) (106 words) - [Thanks for signing up! You have one thing left to do…](/content/confirm_email/index.html) (126 words) - [But until then…](/content/thankyou-newsletter/index.html) (74 words) - [Alright! You’re now subscribed to the ‘5 Days to Smaller View Controllers’ course.](/content/thankyou-5days/index.html) (77 words) - […This is a little embarassing, but the page you’re looking for can’t be found.](/content/404/index.html) (48 words) - [CocoaHeads Montreal](/content/projects/index.html) (119 words) - [I love talking about NSOperations, and I hope you got a lot out of it!](/content/cocoaheadsnyc2017/index.html) (106 words) - [The next step](/content/thankyou-trainingquestionnaire/index.html) (61 words) - [Alright! I just sent your bonus to your email. You should be receiving it any minute 😃](/content/thankyou-download/index.html) (44 words) - [## Finally implement accessibility again](/content/workshops/testing-workshop-html.html): Finally implement accessibility again (7 words) - [Building views in code can seem daunting at first, especially when you’re used to doing it in Interface Builder. Today, I hope to show you that there isn’t any magic to it.](/content/uiview-basics-html.html): Building views in code can seem daunting at first, especially when you're used to doing it in Interface Builder. Today, I'm going to show you that there isn'... (1,681 words) - [Don’t subclass UIKit controls (e.g. `UIButton`, `UILabel`, `UITextField` and `UISlider`).](/content/dont-subclass-uikit-controls-html.html): There aren't many reasons for which you would need to subclass a UIKit control. In this article, we look at what to do instead. (1,068 words) - [Breaking up massive view controllers can be difficult. When we look at a 3000-line controller, **we know it should be smaller, but we often don’t know where to start**. Some view controllers simply feel like they _need_ to be massive because they display many model objects and provide all sorts of interaction.](/content/layered-view-controllers-html.html): Sometimes we want to break up massive view controllers, but we don't know where to start. Here's a simple framework to help you understand the different (1,890 words) - [When you start building apps with UIKit, MVC is the first pattern you learn. And with good reason: UIKit is, quite literally, built to function with MVC. The pattern does a lot of the heavy lifting early on, but as your app grows, your controllers tend to grow as well. Often, they grow so large that they become brittle and difficult to work with.](/content/no-problem-with-mvc-html.html): When you start building apps with UIKit, MVC is the first pattern you learn. And with good reason: UIKit is, quite literally, built to function with MVC. The... (1,193 words) - [I’ve been working hard on the [**Mastering iOS Concurrency with GCD Workshop**](/content/gcd_workshop/index.html), and I’ve realized that there’s a lot of things that we take for granted about concurrency on iOS.](/content/gcd-lies-html.html): I've been working hard on the Mastering iOS Concurrency with GCD Workshop, and I've realized that there's a lot of things that we take for granted about conc... (1,067 words) - [Distraction has been at the forefront of my mind recently because, more so than ever, I feel like I’ve finally gotten a handle on this problem. Sitting down to do focused work was becoming very difficult. And I know I’m not the only one to feel like this either.](/content/taming-distractions-html.html): Distraction has been at the forefront of my mind recently because, more so than ever, I feel like I’ve finally gotten a handle on this problem. Sitting down ... (1,721 words) - [The delegate pattern isn’t glamorous, but it’s the workhorse of view controller communication. Knowing _what to delegate_ and _when to delegate_ is essential to mastering iOS architecture and keeping your view controllers manageable.](/content/delegates-html.html): One of the most handy tools for creating small, concise view controllers is the delegate pattern. In this article, we'll learn how to implement the delegate ... (2,103 words) - [A few years ago, I [wrote about a simple technique](/content/dry-data-sources.html) to encourage code reuse in data sources. I used this all the time in Objective-C, but I could never get it to quite feel right in Swift. I always had to resort to using type erasers or simply forgo strong types altogether.](/content/protocol-witnesses-html.html): A few years ago, I wrote about a simple technique to encourage code reuse in data sources. I used this all the time in Objective-C, but I could never get it ... (1,955 words) - [This article is part of a 4-part series on [Passing data between View Controllers](/content/viewcontrollercommunication/index.html)](/content/the-problem-with-apples-view-controllers-html.html): If you want view controllers that are easy to work with, they need to be properly decoupled from the rest of your app. Let's explore some guidelines on how t... (1,651 words) - [This article is part of a 4-part series on [Building Custom Collection View Layouts.](/content/collectionviewlayout/index.html)](/content/layout-from-scratch-html.html): Sometimes you know that creating a custom collection view layout is the right solution, but actually implementing it seems out of reach. Today, we'll learn t... (2,379 words) - [This article is part of a 4-part series on [Building Custom Collection View Layouts.](/content/collectionviewlayout/index.html)](/content/components-collection-view-layout-html.html): It's easy to get lost in all the different elements involved in making a collection view layout look great. Let's learn about the different actors that make ... (1,313 words) - [This article is part of a 4-part series on [Building robust, reliable code with NSOperations.](/content/nsoperations/index.html)](/content/grouping-operations-html.html): You’ll quickly see that creating the same operations over and over again can become a verbose. In this article, we’ll look at how we can group commonly used ... (1,159 words) - [There’s been a lot of back and forth recently about Apple’s style of MVC. Is it something we can work with in the real world? Or is it lacking?](/content/stateful-content-controller-html.html): There’s been a lot of back and forth recently about Apple’s style of MVC. Is it something we can work with in the real world? Or is it lacking? (1,243 words) - [As developers, we’re in a unique position where we can create our own tools. If nothing fits our needs, we can make our own! Isn’t that an empowering feeling? Today, I want to share with you a simple `UIViewController` base class that I built as tool for myself.](/content/3-rules-to-base-view-controllers-html.html): Inheritance can be a double-edged sword, especially when it comes to building our own UIViewControllers. In this article, we’ll look at how we can make base ... (1,354 words) - [In Part 1, we looked at the basics of the `NSOperation` class and how to build our own. Today, we’ll taking things to the next level: we’ll look at how operations can work together in order to create new, complex behaviors.](/content/chaining-nsoperations-html.html): While having a single NSOperation is nice, their true power lies in how we can compose them together. In this article, we’ll look at how we can pass data fro... (1,149 words) - [Every iOS application is built on data, and that data is often presented using `UITableView` or `UICollectionView`. As such, apps end up with all sorts of different data sources.](/content/dry-data-sources-html.html): Do you ever feel like you're repeating yourself a little too much in your data source code? Together, let's look at how we can create reusable components tha... (2,067 words) - [This article is part of a 4-part series on [Building robust, reliable code with NSOperations.](/content/nsoperations/index.html)](/content/getting-started-with-operations-html.html): Operations are the tried and true way of creating complex behaviours in a simple manner. Let's get more familiar with them! (1,942 words) - [The iOS development community is clearly split on the issue of singletons.](/content/avoiding-singletons-in-your-ios-apps-html.html): Singletons are everywhere, and they need to be dealt with. How can we refactor code that's already littered with Singletons? Here's how! (1,232 words) - [sitemap-xml.html](/content/sitemap-xml.html) (84 words) ## Resources - [Full Page Index](/index.html): Browse all cached pages with rich metadata - [About This Cache](/content/about.html): Methodology, technical details, and usage guidelines - [XML Sitemap](/sitemap.xml): Machine-readable sitemap for crawler discovery - [Robots.txt](/robots.txt): Crawler directives