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
Weak, Strong, Unowned - Hector Matos
Search
Realm
August 03, 2015
0
49k
Weak, Strong, Unowned - Hector Matos
Realm
August 03, 2015
Tweet
Share
More Decks by Realm
See All by Realm
WWDC 2017 Review
realm
0
2.1k
Xcode shortcuts
realm
0
4.7k
Self Branding with GitHub
realm
0
4.3k
Realm Mobile Platform overview and demo
realm
0
2k
Realm advanced topics and demo
realm
0
2k
Realm introduction Seoul meetup 10
realm
0
2.1k
Stuart Hall: How I got 2.3 Million App Downloads
realm
0
1.9k
James Majors: What the Swiftly Func?
realm
1
4.3k
Simina Pasat: Continuous everything for iOS apps
realm
0
630
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
96
6.1k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Typedesign – Prime Four
hannesfritz
42
2.7k
Gamification - CAS2011
davidbonilla
81
5.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
4 Signs Your Business is Dying
shpigford
184
22k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
Designing for humans not robots
tammielis
253
25k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
182
54k
Scaling GitHub
holman
461
140k
Transcript
Weak, Strong, Unowned Oh, My!
Quick Intro
Hi! I'm Hector Matos
None
Sr. Software Engineer @ Capital One
@allonsykraken on the Twitters
Father of KrakenDev.io
ARC
- (void)releaseTheKraken { Kraken *kraken = [[Kraken alloc] init]; //+1
retain [kraken release]; //generated by ARC }
Magic has it's limitations And so does ARC
Leaked Memory & Retain Cycles
None
None
Strong References Default in Swift
Now Stop, Example Time //Kraken holds a strong reference to
the yummy human. class Kraken { var yummyHuman: Human }
// The animation closure holds a strong reference to self
// self.retainCount is 1 here UIView.animateWithDuration(0.3) { // self.retainCount is 2 here self.view.alpha = 0.0 }
Questions?
Weak References Safe - Independent
Stop, Collaborate, & Listen! (to my next example) class KrakensFace:
UIView { @IBOutlet weak var razorSharpTeeth: UIView! } KrakenAPI.eat(yummyHuman, whenFinished: { [weak self] in self?.waitForNextMealTime() })
WTF is "[weak self] in"?!
Capture Lists It's just an array. That's all it is.
There, there. It's all over now. !
KrakenAPI.eat(yummyHuman, finished: { [weak self, unowned lovedOne = yummyHuman.lovedOne] in
self?.waitForNextMealTime() })
Questions?
Unowned References Mutual Dependence
class Human { var heart: ! func seeKrakenComing() { heart.haveHeartAttack()
} } class !: Organ { unowned let human: Human init(human: Human) { self.human = human } func haveHeartAttack() { human.die() } } let human = Human() human.heart = !(human: human)
Questions?
None
❤