{"id":51100,"date":"2026-02-26T16:57:09","date_gmt":"2026-02-26T21:57:09","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=51100"},"modified":"2026-03-04T11:33:57","modified_gmt":"2026-03-04T16:33:57","slug":"why-not-objective-c","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2026\/02\/26\/why-not-objective-c\/","title":{"rendered":"Why Not Objective-C"},"content":{"rendered":"<p><a href=\"https:\/\/inessential.com\/2026\/02\/18\/why-not-objective-c.html\">Brent Simmons<\/a>:<\/p>\n<blockquote cite=\"https:\/\/inessential.com\/2026\/02\/18\/why-not-objective-c.html\">\n<p>I led the effort to port our remaining Objective-C to Swift. When I started that project, Objective-C was about 25% of the code; when I retired it was in the low single digits (and has gone even lower since, I&rsquo;ve heard).<\/p>\n<p>[&#8230;]<\/p>\n<p>Objective-C code was where a lot of our crashing bugs and <em>future<\/em> crashing bugs (and bugs of all kinds) lived.<\/p>\n<p>[&#8230;]<\/p>\n<p>A second thing we knew was that having to interoperate between Swift and Objective-C is a huge pain.<\/p>\n<p>[&#8230;]<\/p>\n<p>And a third thing we knew was that very few of our engineers had a background writing Objective-C. Maintaining that code &mdash; fixing bugs, adding features &mdash; was more expensive than it was for Swift code.<\/p>\n<\/blockquote>\n<p>I prefer Swift for new code, but I don&rsquo;t really want to rewrite working code. I haven&rsquo;t found my old Objective-C to be a source of bugs. However, I always seem to end up rewriting more than I initially planned because the interop is such a pain. I like using Swift for the main data types in my app, but of course those get used everywhere, including from Objective-C code. I&rsquo;m also convinced that Objective-C interop is a source of some of the weird compiler behavior I see with crashes and dependency tracking. The part I <em>don&rsquo;t<\/em> like rewriting in Swift is stuff that calls plain C APIs. The Swift version often feels less readable, and I&rsquo;m less sure that it&rsquo;s correct&mdash;both the opposite of my normal experience with the language.<\/p>\n\n<p id=\"why-not-objective-c-update-2026-03-03\">Update (<a href=\"#why-not-objective-c-update-2026-03-03\">2026-03-03<\/a>): <a href=\"https:\/\/inessential.com\/2026\/02\/27\/why-objective-c.html\">Brent Simmons<\/a> (<a href=\"https:\/\/indieweb.social\/@brentsimmons\/116145709346096958\">Mastodon<\/a>):<\/p>\n<blockquote cite=\"https:\/\/inessential.com\/2026\/02\/27\/why-objective-c.html\">\n<p>Then of course I wrote some Objective-C code recently and really, really loved it.<\/p>\n<p>[&#8230;]<\/p>\n<p>Once you get past that, which takes a day or two given a good-faith effort, you&rsquo;ll realize how small a language it is, how easy to hold in your palm and turn around and understand all sides of it. And you&rsquo;ll appreciate how easy it is to make good decisions when you don&rsquo;t have a surplus of language features to choose from.<\/p>\n<p>[&#8230;]<\/p>\n<p>It&rsquo;s a clich&eacute; to call Objective-C a more elegant weapon for a more civilized age. It&rsquo;s better thought of, these days, as a loaded footgun.<\/p>\n<p>But I did absolutely love writing this code! So much fun.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/indieweb.social\/@brentsimmons\/116146277570613504\">Brent Simmons<\/a>:<\/p>\n<blockquote cite=\"https:\/\/indieweb.social\/@brentsimmons\/116146277570613504\">\n<p>Two things I didn&rsquo;t note in my post on Objective-C but could have: the compiler is crazy fast, and the debugger is wonderfully smooth, without all the latency we&rsquo;ve become used to the last bunch of years. The whole experience feels so different &mdash; so light and easy.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/hachyderm.io\/@smitty825\/116146248711557112\">smitty825<\/a>:<\/p>\n<blockquote cite=\"https:\/\/hachyderm.io\/@smitty825\/116146248711557112\">\n<p>I have an old Objective-C Mac app that I have to go back and rebuild on occasion. There are two things that blow my mind each time I rebuild:<\/p>\n<ol>\n<li>No matter what version of Xcode I use&#8230;it always compiles successfully the first time. <\/li>\n<li>Holy hell&#8230;does it compile fast!  It feels like I press the build and deploy button, and it&rsquo;s deploying almost immediately.<\/li>\n<\/ol>\n<\/blockquote>\n\n<p>I was recently working on some Objective-C code, while my Mac was on battery in Low Power Mode. I made some changes to the app code and pressed the keyboard shortcut for Test Again. At first I thought nothing had happened, but actually it had recompiled and run the test in the blink of an eye. It feels totally different from writing Swift, where even a tiny change in test code (so that app doesn&rsquo;t need to be recompiled) takes 5&#x2013;10 seconds.<\/p>\n\n<p id=\"why-not-objective-c-update-2026-03-04\">Update (<a href=\"#why-not-objective-c-update-2026-03-04\">2026-03-04<\/a>): <a href=\"https:\/\/www.manton.org\/2026\/03\/03\/brent-simmons-blogged-last-week.html\">Manton Reece<\/a>:<\/p>\n<blockquote cite=\"https:\/\/www.manton.org\/2026\/03\/03\/brent-simmons-blogged-last-week.html\">\n<p>I still prefer Objective-C and plan to continue to use it. One change I&rsquo;m thinking about making, though&#8230; Going all code for UI instead of XIBs or Storyboards, to make it easier to diff when working with AI.<\/p>\n<\/blockquote>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2021\/05\/13\/an-appreciation-of-objective-c\/\">An Appreciation of Objective-C<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Brent Simmons: I led the effort to port our remaining Objective-C to Swift. When I started that project, Objective-C was about 25% of the code; when I retired it was in the low single digits (and has gone even lower since, I&rsquo;ve heard). [&#8230;] Objective-C code was where a lot of our crashing bugs and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2026-02-26T21:57:12Z","apple_news_api_id":"8478e661-c54f-4480-991c-c69dc6bbb0c1","apple_news_api_modified_at":"2026-03-04T16:34:06Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAQ==","apple_news_api_share_url":"https:\/\/apple.news\/AhHjmYcVPRICZHMadxruwwQ","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[1876,31,2586,26,54,71,2074,901],"class_list":["post-51100","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-audible","tag-ios","tag-ios-18","tag-iosapp","tag-objective-c","tag-programming","tag-software-rewrite","tag-swift-programming-language"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/51100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=51100"}],"version-history":[{"count":3,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/51100\/revisions"}],"predecessor-version":[{"id":51155,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/51100\/revisions\/51155"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=51100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=51100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=51100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}