Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Bad Cocoa
Delisa Mason
May 28, 2014
Programming
12
16k
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
310
AppKit for iOS Developers
kattrali
5
660
Crafting iOS Dev Tools in Redcar, the Ruby Editor
kattrali
2
570
Other Decks in Programming
See All in Programming
Monadic Java
mariofusco
4
260
UI State Modeling 어떤게 좋을까?
laco2951
1
220
JGS594 Lecture 23
javiergs
PRO
0
400
質とスピード(2022春版、質疑応答用資料付き) / Quality and Speed 2022 Spring Edition
twada
PRO
28
18k
dbtとBigQueryで始めるData Vault入門
kazk1018
0
180
Language Summit 2022: WebAssembly: Python in the browser and beyond
tiran
2
310
近況PHP / PHP in now a days
uzulla
4
1.7k
Kotlin 最新動向2022 #tfcon #techfeed
ntaro
1
1.1k
TDX22: User-Mode DB Ops
ca_peterson
3
1.1k
もしも、 上司に鬼退治を命じられたら~プロジェクト計画編~
higuuu
0
270
Jakarta EE 10 is Coming Your Way
ivargrimstad
0
2.5k
職場にPythonistaを増やす方法
soogie
0
310
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
14
34k
How to train your dragon (web standard)
notwaldorf
57
3.8k
Keith and Marios Guide to Fast Websites
keithpitt
404
21k
Designing with Data
zakiwarfel
91
3.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
19
1.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
151
12k
What's in a price? How to price your products and services
michaelherold
229
9.3k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
29
4.3k
Infographics Made Easy
chrislema
233
17k
Building Better People: How to give real-time feedback that sticks.
wjessup
343
17k
Six Lessons from altMBA
skipperchong
14
1.3k
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!