Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon...

211
© 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC15 Optimizing Your App for Multitasking on iPad in iOS 9 Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212

Transcript of Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon...

Page 1: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

© 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

#WWDC15

Optimizing Your App for Multitasking on iPad in iOS 9

Brittany Paine iOS SpringBoard EngineerJon Drummond iOS SpringBoard Engineer

App Frameworks

Session 212

Page 2: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Multitasking Sessions

Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM

Multitasking Essentials for Media-Based Apps on iPad in iOS 9 Pacific Heights Wednesday 2:30PM

Optimizing Your App for Multitasking in iOS Presidio Wednesday 3:30PM

Page 3: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Multitasking Sessions

Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM

Multitasking Essentials for Media-Based Apps on iPad in iOS 9 Pacific Heights Wednesday 2:30PM

Optimizing Your App for Multitasking in iOS Presidio Wednesday 3:30PMOptimizing Your App for Multitasking in iOS

Page 4: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 5: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CPU

Page 6: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CPU

1 frame

Page 7: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CPU

1 frame

Page 8: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CPU

1 frame

Page 9: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

FreeSystem Primary App

Memory

Page 10: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

FreeSystem Primary App Secondary App

Memory

Page 11: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Secondary App PiP

Memory

Primary App

Page 12: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Secondary App PiP

Memory

!!

Page 13: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Secondary App PiP

Memory

Page 14: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

What Is SpringBoard?

Page 15: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

idle timer

app launching

event routing

application lifecycleproximity detection

orientation lock

external display management home screen

lock screen

control center

app switcher

voice control

phone calls

wallpaper

notification center

icons

folders

notificationsremote notifications

alarms

do not disturbsystem gestures

alerts

What Is SpringBoard?

Page 16: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

UIApplication

What Is SpringBoard?

Page 17: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

SpringBoard

Page 18: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

SpringBoard

The original multitasking app

Page 19: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

SpringBoard

The original multitasking appFaced the same multitasking challenges as you do now

Page 20: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

SpringBoard

The original multitasking appFaced the same multitasking challenges as you do nowLearned a lot of lessons along the way

Page 21: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Optimizing Your AppThe easy stuff

Page 22: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Optimizing Your App

Fix memory leaks

The easy stuff

Page 23: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Optimizing Your App

Fix memory leaksFix retain cycles and unbounded memory growth

The easy stuff

Page 24: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Optimizing Your App

Fix memory leaksFix retain cycles and unbounded memory growthFix inefficient algorithms

The easy stuff

Page 25: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Great Performance Involves Tradeoffs

a

Memory

b

CPU

c

Disk Space I/O

e

GPU

Page 26: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Great Performance Involves Tradeoffs

a

Memory CPU

c

Disk Space I/O

e

GPU

b

Page 27: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Great Performance Involves Tradeoffs

a

Memory CPU

c

Disk Space I/O

e

GPU

b

Page 28: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Great Performance Involves Tradeoffs

a

Memory

b

CPU

c

Disk Space I/O

e

GPU

Page 29: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 30: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 31: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 32: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 33: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 34: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 35: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 36: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 37: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 38: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 39: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 40: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 41: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 42: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

a

Memory

b

CPU I/O

Digging In

Page 43: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

a

Memory

b

CPU I/O

Digging In

CPU and disk I/O are minimalwhile scrolling

Page 44: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Digging In

a

Memory

b

CPU I/O

CPU and disk I/O are minimalwhile scrolling

Page 45: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Digging In

a

Memory

b

CPU I/O

All icons kept in memory

CPU and disk I/O are minimalwhile scrolling

Page 46: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Digging In

a

Memory

b

CPU I/O

All icons kept in memory

CPU and disk I/O are minimalwhile scrolling

Page 47: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Digging In

a

Memory

b

CPU I/O

System reclaims memory by terminating processes

All icons kept in memory

CPU and disk I/O are minimalwhile scrolling

Page 48: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory ManagementWorking set

Page 49: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory ManagementWorking set

The critical objects and resources you need right now

Page 50: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory ManagementWorking set

The critical objects and resources you need right now• Keep it small

Page 51: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory ManagementWorking set

The critical objects and resources you need right now• Keep it small• It might change based on context

Page 52: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory ManagementWorking set

The critical objects and resources you need right now• Keep it small• It might change based on context• Don’t let it grow unbounded

Page 53: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 54: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set = Every Page

Page 55: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set = Every Page

Page 56: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set = Every Page

Page 57: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 58: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set = 1 Page

Page 59: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set = 1 Page

Page 60: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set = 1 Page

Page 61: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 62: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 63: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 64: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

a

Memory

b

CPU

Digging In

I/O

Page 65: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

a

Memory

b

CPU

Digging In

I/O

CPU and disk I/O are highwhile scrolling

Page 66: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Digging In

a

Memory CPU I/O

b

CPU and disk I/O are highwhile scrolling

Page 67: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Digging In

Memory CPU I/O

a b

CPU and disk I/O are highwhile scrolling

Very few icons in memory

Page 68: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Digging In

Memory CPU I/O

a b

CPU and disk I/O are highwhile scrolling

Very few icons in memory

Page 69: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CPU ManagementMain thread

Main thread’s top priority is responding to user eventsDon’t do unnecessary work

Page 70: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CPU ManagementQuality of service

User Interactive* Is this work actively involved in updating the UI?

User Initiated Is this work required to continue user interaction?

Utility Is the user aware of the progress of this work?

Background Can this work be deferred to start at a better time?

UT

IN

UI

BG

* Main thread

Building Responsive and Efficient Apps with GCD Nob Hill Friday 10:00AM

Power, Performance, and Diagnostics: What’s New in GCD and XPC WWDC14

Page 71: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

dispatch_queue_t iconQueue = dispatch_queue_create("IconGenerationQueue", DISPATCH_QUEUE_SERIAL);

for (IRIcon *icon in [iconPage icons]) { dispatch_async(iconQueue, ^{ [self _iconQueue_generateImageForIcon:icon]; }); }];

Page 72: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

dispatch_queue_t iconQueue = dispatch_queue_create("IconGenerationQueue", DISPATCH_QUEUE_SERIAL);

for (IRIcon *icon in [iconPage icons]) { dispatch_async(iconQueue, ^{ [self _iconQueue_generateImageForIcon:icon]; }); }];

Page 73: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

dispatch_queue_t iconQueue = dispatch_queue_create("IconGenerationQueue", DISPATCH_QUEUE_SERIAL);

for (IRIcon *icon in [iconPage icons]) { dispatch_async(iconQueue, ^{ [self _iconQueue_generateImageForIcon:icon]; }); }];

Page 74: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 75: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 76: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 77: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CPU ManagementQoS overrides

Lower priority queues can be temporarily boosted when a higher priority queue is waiting for itThe system needs a hint that you want a QoS override to occur

Page 78: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Strategy Overrides?

dispatch_sync()

dispatch_block_wait()

dispatch_group_wait()

dispatch_semaphore_wait()

QoS OverridesDispatch

Building Responsive and Efficient Apps with GCD Nob Hill Friday 10:00AM

Power, Performance, and Diagnostics: What’s New in GCD and XPC WWDC14

Page 79: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

dispatch_sync(iconQueue, ^{ // ensure icon generation completes at caller QoS });

UIImage *image = [icon image];

Page 80: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 81: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 82: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 83: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 84: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 85: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display
Page 86: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set = 1 Page

2 3 4

e fa c - overlay bd - overlay

Page 87: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

2 3 4

e f

Working Set = 3 Pages

c - overlayd - overlay

Page 88: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

43 5

Working Set = 3 Pages

gc - overlayd - overlay

fe

Page 89: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

43 5

Working Set = 3 Pages

gc - overlayd - overlay

e

Page 90: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

h

4

e

2 3

Working Set = 3 Pages

c - overlay gd - overlay

Page 91: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

h

42 3

Working Set = 3 Pages

c - overlay gd - overlay

Page 92: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

s

FreeSystem IconReel

Working Set = 1 Page

Page 93: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

FreeSystem IconReel

Working Set = 3 Pages

Page 94: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

FreeSystem IconReel

Working Set = 3 Pages

Secondary App

Page 95: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

FreeSystem IconReel

Working Set = 3 Pages

Secondary App

Page 96: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Managing Memory GrowthMemory warnings

Page 97: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Managing Memory GrowthMemory warnings

Happens when• The system is under memory pressure• Your process is approaching its memory limit

Page 98: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Managing Memory GrowthMemory warnings

Happens when• The system is under memory pressure• Your process is approaching its memory limit

What to do• Remove anything not in the working set

- Clear cached data- Release images- Release view controllers

Page 99: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory WarningsAPIs

In your UIApplicationDelegate and UIViewControllers-[UIApplicationDelegate applicationDidReceiveMemoryWarning:] -[UIViewController didReceiveMemoryWarning]

Anywhere in an application processUIApplicationDidReceiveMemoryWarningNotification

In libraries and extensionsDISPATCH_SOURCE_TYPE_MEMORYPRESSURE

Page 100: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Managing Memory GrowthNSCache

NSDictionary-likeIdeal for objects that can be regenerated on demand Trims under memory pressureTrims for application lifecycle changes

Page 101: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

FreeSystem

Working Set = 3 Pages

Secondary AppIconReel

Page 102: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

FreeSystem

Working Set = 3 Pages

Secondary AppIconReel

Page 103: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System

Working Set = 3 Pages

FreeSecondary AppIconReel

Page 104: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System

Working Set = 3 Pages

FreeSecondary AppIconReel

Page 105: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System

Working Set = 3 Pages

FreeSecondary AppIconReel

Page 106: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

a

Recap

Memory CPU I/O

Page 107: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

a

Recap

Memory CPU I/O

Page 108: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

a

Recap

Memory CPU I/O

Working Set

Page 109: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

a

Recap

NSCache{Adaptive

Memory CPU I/O

Working Set

Page 110: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Advanced Adaptive MemoryLeveraging the Virtual Memory System

Jon Drummond iOS SpringBoard Engineer

Page 111: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Primary AppSystem Secondary App

Page 112: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Primary AppSystem

Memory Warning

Secondary App

!!

Page 113: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Primary AppSystem

Memory Warning

Secondary App

!!

Page 114: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App Secondary App

Page 115: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App PiPSecondary App

!

Page 116: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App Secondary App PiP

Page 117: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Secondary AppSystem Primary App PiP

Page 118: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Secondary AppSystem PiP

!!

Page 119: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System PiPSecondary App

Page 120: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

“The world outside your process should be regarded as hostile and bent upon your destruction.”

Me, almost everyday

Page 121: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Advanced Adaptive Memory

Page 122: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Advanced Adaptive Memory

Memory is the most constrained resource on iOS• No swap

Page 123: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Advanced Adaptive Memory

Memory is the most constrained resource on iOS• No swap

System can require memory faster than it can be released• CPU contention during memory

warnings can slow or prevent apps from releasing it

Page 124: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Classification Description Reclaimable?

Dirty Memory in active use

Purgeable Otherwise-dirty memory designated as not in-use

Clean Read-only memorybacked by files on disk

Memory Classification

Page 125: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Classification Description Reclaimable?

Dirty Memory in active use

Purgeable Otherwise-dirty memory designated as not in-use

Clean Read-only memorybacked by files on disk

Memory Classification

Page 126: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Classification Description Reclaimable?

Dirty Memory in active use

Purgeable Otherwise-dirty memory designated as not in-use

Clean Read-only memorybacked by files on disk

Memory Classification

Page 127: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Classification Description Reclaimable?

Dirty Memory in active use

Purgeable Otherwise-dirty memory designated as not in-use

Clean Read-only memorybacked by files on disk

Memory Classification

Page 128: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Classification

Clean or purgeable memory is reclaimable

Page 129: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Classification

Leeway

Page 130: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Leveraging the Virtual Memory SystemGoals

Minimize dirty memory usageMaximize purgeable and clean memory usage

iOS App Performance: Memory WWDC12

Page 131: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Minimizing Dirty Memory

Page 132: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Minimizing Dirty Memory

Use less of it!

Page 133: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Minimizing Dirty Memory

Use less of it!Classify otherwise dirty memory as purgeable• Can be automatically reclaimed when not in use• Best for “nice to have” data that can be recomputed

Page 134: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

Page 135: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

Page 136: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

Page 137: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

Page 138: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

Page 139: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

In Use/Dirty

Page 140: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

In Use/Dirty PurgeablePurgeable

Page 141: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

In Use/Dirty PurgeablePurgeable

Page 142: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

In Use/Dirty PurgeablePurgeable

Page 143: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

In Use/Dirty PurgeablePurgeable

Page 144: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

In Use/Dirty PurgeablePurgeable

Page 145: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelAdopting purgeable data

Working SetNSCache NSCache

In Use/Dirty PurgeablePurgeable

Page 146: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App Secondary App PiP

!!

Page 147: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System

Reclaimable

Primary App Secondary App PiP

!!

Page 148: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System

Reclaimable

Primary App Secondary App PiP

!!

Page 149: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App Secondary App PiP

Page 150: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App Secondary App PiP

Page 151: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App Secondary App PiP

Page 152: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App PiPSecondary App

Page 153: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App PiPSecondary App

Memory Warning!!

Page 154: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App PiPSecondary App

Memory Warning!!

Page 155: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App PiPSecondary App

Page 156: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

System Primary App PiPSecondary App

Page 157: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

NSPurgeableData• beginContentAccess • endContentAccess • isContentDiscarded

APIPurgeable Data

- memory now considered dirty- memory now considered purgeable- has the memory been reclaimed?

Page 158: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

NSCache

CPU I/O

Working Set

Memory

{Adaptive

IconReelSystem resources

Page 159: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

NSCache

Purgeable

CPU I/O

Working Set

Memory

{Adaptive

IconReelSystem resources

Page 160: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelData characteristics

Page 161: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelData characteristics

Absolutely essential

Page 162: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelData characteristics

Absolutely essentialExpensive to generate

Page 163: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelData characteristics

Absolutely essentialExpensive to generateCan be pre-computed

Page 164: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelData characteristics

Absolutely essentialExpensive to generateCan be pre-computedStatic once generated

Page 165: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelData characteristics

Absolutely essentialExpensive to generateCan be pre-computedStatic once generatedPerfect candidate for caching to a file!

Page 166: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set

IconReelSystem resources

NSCache

CPU I/OMemory

Purgeable

Page 167: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set

IconReelSystem resources

NSCache

CPU I/OMemory Disk Space

Purgeable

Page 168: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Working Set

CPU I/OMemory Disk Space

IconReelSystem resources

NSCache

Purgeable

Page 169: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CPU I/OMemory Disk Space

Working Set

IconReelSystem resources

NSCache

Purgeable

Page 170: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Maximizing Clean Memory

Page 171: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Maximizing Clean Memory

Memory backed by a file on disk is considered clean• Data in such a file can be “memory mapped”

Page 172: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Maximizing Clean Memory

Memory backed by a file on disk is considered clean• Data in such a file can be “memory mapped”

Memory and file contents must match exactly• Ideal for read-only data

Page 173: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Maximizing Clean Memory

Memory backed by a file on disk is considered clean• Data in such a file can be “memory mapped”

Memory and file contents must match exactly• Ideal for read-only data

Data in memory is evicted and reloaded on your behalf• Allows for random access

Page 174: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Mapped Data

Data in Memory

Page 175: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Mapped Data

Data in Memory

File on Disk

Page 176: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Mapped Data

Memory Mapped Data

File on Disk

Page 177: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Mapped Data

Page 178: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Mapped Data

Page 179: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Mapped Data

Page 180: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 181: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 182: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 183: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 184: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Memory Mapped Image Data

IconReel

Page 185: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 186: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 187: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 188: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 189: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReel

Page 190: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelSystem resources

CPU I/OMemory Disk Space

NSCache/Purgeable

Working Set

Page 191: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

IconReelSystem resources

CPU I/OMemory Disk Space

Working Set

Page 192: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

APIMemory Mapped Data

typedef NS_OPTIONS(NSUInteger, NSDataReadingOptions) { NSDataReadingMappedIfSafe, NSDataReadingMappedAlways, … };

@interface NSData (NSDataCreation)

- (nullable instancetype)initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr;

@end

Page 193: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

APIMemory Mapped Data

typedef NS_OPTIONS(NSUInteger, NSDataReadingOptions) { NSDataReadingMappedIfSafe, NSDataReadingMappedAlways, … };

@interface NSData (NSDataCreation)

- (nullable instancetype)initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr;

@end

Page 194: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

APIMemory Mapped Data

typedef NS_OPTIONS(NSUInteger, NSDataReadingOptions) { NSDataReadingMappedIfSafe, NSDataReadingMappedAlways, … };

@interface NSData (NSDataCreation)

- (nullable instancetype)initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr;

@end

Page 195: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CaveatsLeveraging the Virtual Memory System

VM Addressable Space0x00000000 0xFFE00000

Page 196: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CaveatsLeveraging the Virtual Memory System

Not appropriate for small chunks of data

VM Addressable Space0x00000000 0xFFE00000

Page 197: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CaveatsLeveraging the Virtual Memory System

Not appropriate for small chunks of dataVirtual Memory misuse• Fragmentation• Exhaustion

VM Addressable Space0x00000000 0xFFE00000

Page 198: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

CaveatsLeveraging the Virtual Memory System

Not appropriate for small chunks of dataVirtual Memory misuse• Fragmentation• Exhaustion

Abusing the VM system can result in process termination

VM Addressable Space0x00000000 0xFFE00000

Page 199: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Summary

Page 200: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Summary

Page 201: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Summary

Use Instruments to identify and fix bugs

Page 202: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Summary

Use Instruments to identify and fix bugsPrioritize your work appropriately and don’t block the main thread

Page 203: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Summary

Use Instruments to identify and fix bugsPrioritize your work appropriately and don’t block the main threadIdentify and manage your working set

Page 204: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Summary

Use Instruments to identify and fix bugsPrioritize your work appropriately and don’t block the main threadIdentify and manage your working setUse caches and respond tomemory warnings

Page 205: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Summary

Use Instruments to identify and fix bugsPrioritize your work appropriately and don’t block the main threadIdentify and manage your working setUse caches and respond tomemory warningsLeverage the virtual memory system to increase reclaimable memory

Page 206: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Summary

Use Instruments to identify and fix bugsPrioritize your work appropriately and don’t block the main threadIdentify and manage your working setUse caches and respond tomemory warningsLeverage the virtual memory system to increase reclaimable memoryGreat performance requires tradeoffs

Page 207: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

“It is not the strongest or the most intelligent who survive, but those who can best manage change.”

Charles Darwin (apocryphal)

Page 208: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

More Information

DocumentationAdopting MultitaskingEnhancements on iPadPerformance OverviewInstruments User Guidehttp://developer.apple.com/iOS

Technical SupportApple Developer Forumshttp://developer.apple.com/forums

Developer Technical Supporthttp://developer.apple.com/support/technical

General InquiriesCurt Rothert, App Frameworks [email protected]

Page 209: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Related Sessions

Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM

Multitasking Essentials for Media-Based Apps oniPad in iOS 9 Pacific Heights Wednesday 2:30PM

Performance on iOS and watchOS Presidio Friday 11:00AM

Building Responsive and Efficient Apps with GCD Nob Hill Friday 10:00AM

Page 210: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display

Labs

Cocoa Touch and Multitasking Lab Frameworks Lab B Wednesday 9:00AM

Power and Performance Lab Frameworks Lab C Friday 12:00PM

Page 211: Optimizing Your App for Multitasking on iPad in iOS 9...Brittany Paine iOS SpringBoard Engineer Jon Drummond iOS SpringBoard Engineer App Frameworks Session 212. ... external display