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
430
AppKit for iOS Developers
kattrali
5
870
Crafting iOS Dev Tools in Redcar, the Ruby Editor
kattrali
2
800
Other Decks in Programming
See All in Programming
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
120
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
680
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
150
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
360
Swift at Scale: Where Performance Really Comes From
kateinoigakukun
0
110
Oxlintはいいぞ
yug1224
5
1.4k
kintone + ローカルLLM = ?
akit37
0
100
今から始めるClaude Code超入門
448jp
8
9.3k
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
140
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
今、アーキテクトとして 品質保証にどう関わるか
nealle
0
150
Featured
See All Featured
The Language of Interfaces
destraynor
162
26k
We Have a Design System, Now What?
morganepeng
54
8k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
180
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
130
Paper Plane
katiecoart
PRO
0
47k
Raft: Consensus for Rubyists
vanstee
141
7.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
How to build a perfect <img>
jonoalderson
1
5.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Code Review Best Practice
trishagee
74
20k
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!