memory management in ios
TRANSCRIPT
![Page 1: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/1.jpg)
Study group Memory management
2014/12/16 JoeHsieh
![Page 2: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/2.jpg)
Outline
• Item 29 : Understand Reference Counting
• Item 30 : Use ARC to Make Reference Counting Easier.
![Page 3: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/3.jpg)
Manual Retain Release (MRR)
![Page 4: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/4.jpg)
Manual Retain Release(1/2)
• Tracks how many owners the object has.When it reaches zero, the OS allowed to destroy it.
![Page 5: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/5.jpg)
Manual Retain Release(2/2)• increment
• alloc : Creates an object and claims ownership of it.
• retain : Claims ownership of an existing object
• copy : Copy an object and claims ownership of it
• decrement
• release : Relinquishes ownership of an object and destroy it immediately
• autorelease : Relinquishes ownership of an object but defer its destruction
![Page 6: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/6.jpg)
In case of retain/release is not balanced
• Forgets to release, retain cycle, etc… : memory leak
• Releases too many times, etc… : dangling pointer(zombie)
![Page 7: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/7.jpg)
ExampleMemory Management in Property Accessors
![Page 8: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/8.jpg)
CarStore
![Page 9: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/9.jpg)
Crash?
![Page 10: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/10.jpg)
Dangling pointer and memory leak.
setter will not retain inventory
superstore forget to release
![Page 11: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/11.jpg)
Fixes it, but it’s still memory leak?
![Page 12: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/12.jpg)
Finally…
![Page 13: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/13.jpg)
Automatic Reference Counting (ARC)
In order to solve the verbose problem of MMR, savior is coming!
@property (strong, nonatomic) NSMutableArray *inventory;
For property accessor
![Page 14: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/14.jpg)
ARC• Complier will add retain, release and autorelease
for you automatically.You cannot add these by yourself.
• Memory leak and dangling pointer exist still.
• ARC is only for Objective-C.That means memory management of CoreFundation and C is still MRR.(malloc, free, CFRetain, CFRelease)
![Page 15: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/15.jpg)
Retain Cycle
![Page 16: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/16.jpg)
How to prevent leak ?• Pointer to any parent must not be retained.
![Page 17: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/17.jpg)
Retain Cycle Example
• strong delegate
• retain variables in block
![Page 18: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/18.jpg)
How to solve leak ?• Breaks retain relationship explicitly.
![Page 19: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/19.jpg)
Retain Cycle Example
• Timer
• NSURLConnectionDelegate
![Page 20: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/20.jpg)
Retain Cycle Demo
PrinterVC
Printer
![Page 21: Memory management in iOS](https://reader036.vdocument.in/reader036/viewer/2022062412/589decd61a28ab773b8b62ad/html5/thumbnails/21.jpg)
References
• http://rypress.com/tutorials/objective-c/memory-management
• http://www.cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html
• https://www.mikeash.com/pyblog/friday-qa-2010-04-30-dealing-with-retain-cycles.html