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
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
390
AppKit for iOS Developers
kattrali
5
760
Crafting iOS Dev Tools in Redcar, the Ruby Editor
kattrali
2
670
Other Decks in Programming
See All in Programming
Docker_OSS_ホスティング入門
satokoki645
0
140
TSKaigi 2024 - 新サービス Progate Path の演習で TypeScript を採用して見えた教材観点からの利点と課題
makotoshimazu
1
210
最近コードレビューで指摘したこと
forrep
3
110
freeeのエンジニアが 就活で出そうな コーディングテストを 解説してみる
freee
0
140
CQRS meets modern Java
simas
PRO
2
460
PHPコードの実行モデルを理解する / Understanding-the-PHP-Execution-Model
shin1x1
0
880
Timeline エディター拡張入門
yucchiy
0
440
Balkan Ruby 2024 — How and why to run SQLite on Rails in production
fractaledmind
0
110
Webアプリをできるだけコードを手書きしないで作ってみる
tomokusaba
2
230
Amazon Aurora Serverless v2が意外と高かった話と、AWS Database Migration Serviceの話
satoshi256kbyte
1
110
Exploring Type-Informed Lint Rules in Rust based TypeScript Linters
unvalley
3
610
仕様と実装で学ぶOpenTelemetry
drumato
2
260
Featured
See All Featured
A better future with KSS
kneath
231
16k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
The Illustrated Children's Guide to Kubernetes
chrisshort
32
47k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
15
1.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
Building a Scalable Design System with Sketch
lauravandoore
457
32k
The Brand Is Dead. Long Live the Brand.
mthomps
49
30k
How to Ace a Technical Interview
jacobian
273
22k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Into the Great Unknown - MozCon
thekraken
15
1.1k
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!