Tips & Tricks
• Preloading next rows
• Simple views/layers hierarchy (backboardd!!!)
• view.hidden vs add/removeFromSuperview:
• Using CALayer instead of UIView
• Image decoding in background
• Caching layers (only x2.5 screen sizes!)
Slide 30
Slide 30 text
Tips & Tricks
• Preloading next rows
• Simple views/layers hierarchy (backboardd!!!)
• view.hidden vs add/removeFromSuperview:
• Using CALayer instead of UIView
• Image decoding in background
• Caching layers (only x2.5 screen sizes!)
Slide 31
Slide 31 text
Tips & Tricks
Slide 32
Slide 32 text
Tips & Tricks
• Preloading next rows
• Simple views/layers hierarchy (backboardd!!!)
• view.hidden vs add/removeFromSuperview:
• Using CALayer instead of UIView
• Image decoding in background
• Caching layers (only x2.5 screen sizes!)
Slide 33
Slide 33 text
Tips & Tricks
• Preloading next rows
• Simple views/layers hierarchy (backboardd!!!)
• view.hidden vs add/removeFromSuperview:
• Using CALayer instead of UIView
• Image decoding in background
• Caching layers (only x2.5 screen sizes!)
Slide 34
Slide 34 text
Tips & Tricks
• Preloading next rows
• Simple views/layers hierarchy (backboardd!!!)
• view.hidden vs add/removeFromSuperview:
• Using CALayer instead of UIView
• Image decoding in background
• Caching layers (only x2.5 screen sizes!)
Slide 35
Slide 35 text
Tips & Tricks
• Preloading next rows
• Simple views/layers hierarchy (backboardd!!!)
• view.hidden vs add/removeFromSuperview:
• Using CALayer instead of UIView
• Image decoding in background
• Caching layers (only x2.5 screen sizes!)
Slide 36
Slide 36 text
Tips & Tricks
• Don’t use UILabel with NSAttributedString
• All size calculations in background
• Sometimes UIButton is very expensive
• Use stretchable images where possible
• Use 4 separated stretchable images for outlines
• Avoid offscreen rendering
Slide 37
Slide 37 text
Tips & Tricks
Slide 38
Slide 38 text
Tips & Tricks
• Don’t use UILabel with NSAttributedString
• All size calculations in background
• Sometimes UIButton is very expensive
• Use stretchable images where possible
• Use 4 separated stretchable images for outlines
• Avoid offscreen rendering
Slide 39
Slide 39 text
Tips & Tricks
• Don’t use UILabel with NSAttributedString
• All size calculations in background
• Sometimes UIButton is very expensive
• Use stretchable images where possible
• Use 4 separated stretchable images for outlines
• Avoid offscreen rendering
Slide 40
Slide 40 text
Tips & Tricks
Slide 41
Slide 41 text
Tips & Tricks
• Don’t use UILabel with NSAttributedString
• All size calculations in background
• Sometimes UIButton is very expensive
• Use stretchable images when possible
• Use 4 separated stretchable images for outlines
• Avoid offscreen rendering
Slide 42
Slide 42 text
Tips & Tricks
• Don’t use UILabel with NSAttributedString
• All size calculations in background
• Sometimes UIButton is very expensive
• Use stretchable images when possible
• Use 4 separated stretchable images for outlines
• Avoid offscreen rendering
Tips & Tricks
• Don’t use UILabel with NSAttributedString
• All size calculations in background
• Sometimes UIButton is very expensive
• Use stretchable images when possible
• Use 4 separated stretchable images for outlines
• Avoid offscreen rendering
Slide 51
Slide 51 text
Tips & Tricks
• Avoid offscreen rendering
• Cropping layers by mask, shadows
• Each GC switch takes 0.2ms
• 3 CG switches for rounded corners = 0.6ms
• For 10 rows = 6ms
Slide 52
Slide 52 text
Tips & Tricks
• Don’t use UILabel with NSAttributedString
• All size calculations in background
• Sometimes UIButton is very expensive
• Use stretchable images when possible
• Use 4 separated stretchable images for outlines
• Avoid offscreen rendering
• Avoid Autolayout usage
Slide 53
Slide 53 text
Tips & Tricks
Slide 54
Slide 54 text
Tips & Tricks
Slide 55
Slide 55 text
Tips & Tricks
• Flatting view hierarchy in background
• Simplified view hierarchy => low backboardd
• Doesn’t block main thread
• Only for static parts of cell
Slide 56
Slide 56 text
Tips & Tricks
• Use QoS from iOS 8
• Or implement your own
• LOW, HIGH, and DEFAULT queues are almost the same
(priorities 28, 30, 32)
• Main thread has priority about 40-45
• backboardd priority is about 50
Slide 57
Slide 57 text
Chisel
https://github.com/facebook/chisel
Slide 58
Slide 58 text
Demo
Slide 59
Slide 59 text
How it works?
Slide 60
Slide 60 text
How it works?
• LLDB Python bridge
Slide 61
Slide 61 text
How it works?
• LLDB Python bridge
• expr (void)[CATransaction flush]