Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Bad Cocoa
Search
Delisa Mason
May 28, 2014
Programming
12
17k
Bad Cocoa
How-to guide for building the kind of code you will deeply regret later
Delisa Mason
May 28, 2014
Tweet
Share
More Decks by Delisa Mason
See All by Delisa Mason
Pod for Great Good
kattrali
2
420
AppKit for iOS Developers
kattrali
5
860
Crafting iOS Dev Tools in Redcar, the Ruby Editor
kattrali
2
780
Other Decks in Programming
See All in Programming
開発生産性が組織文化になるまでの軌跡
tonegawa07
0
190
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
120
乱雑なコードの整理から学ぶ設計の初歩
masuda220
PRO
32
15k
CloudflareのSandbox SDKを試してみた
syumai
0
180
FlutterKaigi 2025 システム裏側
yumnumm
0
1.2k
JJUG CCC 2025 Fall: Virtual Thread Deep Dive
ternbusty
3
490
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 1
philipschwarz
PRO
0
110
dnx で実行できるコマンド、作ってみました
tomohisa
0
110
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
310
詳細の決定を遅らせつつ実装を早くする
shimabox
2
1.3k
r2-image-worker
yusukebe
1
180
PHPライセンス変更の議論を通じて学ぶOSSライセンスの基礎
matsuo_atsushi
0
170
Featured
See All Featured
A designer walks into a library…
pauljervisheath
210
24k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
980
Raft: Consensus for Rubyists
vanstee
140
7.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
How to train your dragon (web standard)
notwaldorf
97
6.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Building an army of robots
kneath
306
46k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
56
Transcript
Bad Cocoa How to write the code of deep regret
quickly and easily - @kattrali
Think Monolithic ensure changing one part of an app requires
changing them all
Long Selector is Best Selector
Test Private Stuff ensure every test will break during refactors
maximize the number of mocks, stubs, and performSelector() calls
Do Not Write Tests no worries, the compiler will catch
your bugs
Use Delegates with Callbacks If you don't need asynchronous callbacks
for synchronous code, you aren't trying hard enough -initWithDelegate:callback:
Subclass Subclass Subclass things will be easy when you need
to swap out superclasses sometime!
Categoriception Extend your own classes with several categories instead of
containing each unit of related functionality in a single class
Maximize Responsibilities Per Class ensure the difficulty of changing individual
components later
Safely assign many responsibilities using protocols @class MyController : NSObject
<MyControllerDelegate, Why, God, Please, Stop, WithTheProtocols>
Safely assign many responsibilities using protocols BONUS: Make each component
of a protocol optional, for maximum flexibility and verbosity (and less warnings!!)
Procrastinate on Performance always wait until you have a problem
before opening Instruments.app
if (@"Avoid Static Analysis") goto fail; goto fail;
Always Swing the Heaviest Hammer NSOperation and Core Data all
day every day - maximize boilerplate code (GCD and NSCoding don't real)
Make Code Styles Inconsistent increase the difficulty of using or
extending your project avoid code style tools like clang- format and Uncrustify
Do not write documentation especially avoid easy-to-use tooling like appledoc
Optimize early Reduce duplication as soon as possible, making code
less flexible later
When in doubt, add to AppDelegate There is no better
place to dump bits of code which do not belong anywhere and need access to application state certainly not new classes
#define over static variables get the most of your available
memory for your numbers, strings, and colors
Thank you!