Objective-C Memory Management Essentials
By Gibson Tang and Maxim Vasilkov
()
About this ebook
- Learn about the concepts of memory management in Objective-C
- Get introduced to Swift, an innovative new programming language for Cocoa and Cocoa Touch
- A step-by-step approach to various memory management techniques with lots of sample code and Xcode projects for your reference
If you are new to Objective-C or a veteran in iOS application development, this is the book for you. This book will ensure that you can actively learn the methods and concepts in relation to memory management in a more engaging way. Basic knowledge of iOS development is required for this book.
Related to Objective-C Memory Management Essentials
Related ebooks
Swift 2 Design Patterns Rating: 0 out of 5 stars0 ratingsApplication Development with Swift Rating: 0 out of 5 stars0 ratingsMastering AndEngine Game Development Rating: 0 out of 5 stars0 ratingsiOS 9 Game Development Essentials Rating: 0 out of 5 stars0 ratingsCreating iOS apps with Xcode: Learn how to develop your own app (English Edition) Rating: 0 out of 5 stars0 ratingsSwift 5 for Absolute Beginners: Learn to Develop Apps for iOS Rating: 0 out of 5 stars0 ratingsAndroid Wearable Programming Rating: 0 out of 5 stars0 ratingsSwift by Example Rating: 1 out of 5 stars1/5Core Objective-C in 24 Hours Rating: 5 out of 5 stars5/5Code Beneath the Surface: Mastering Assembly Programming Rating: 0 out of 5 stars0 ratingsObjective-C Programming Nuts and bolts Rating: 0 out of 5 stars0 ratingsColdFusion 9 Developer Tutorial Rating: 0 out of 5 stars0 ratingsObjective-C Fundamentals Rating: 0 out of 5 stars0 ratingsFull Stack iOS Development with Swift and Vapor: Full stack iOS development made easy (English Edition) Rating: 0 out of 5 stars0 ratingsLearning ClojureScript Rating: 0 out of 5 stars0 ratingsModern C++ Programming Rating: 0 out of 5 stars0 ratingsOptimizing Visual Studio Code for Python Development: Developing More Efficient and Effective Programs in Python Rating: 0 out of 5 stars0 ratingsSwift 3 Game Development - Second Edition Rating: 0 out of 5 stars0 ratingsC++ Game Development: Build High-Performance Games from Scratch Rating: 0 out of 5 stars0 ratingsC++ Cookbook: How to write great code with the latest C++ releases (English Edition) Rating: 0 out of 5 stars0 ratingsGetting Started with Unity 5.x 2D Game Development Rating: 0 out of 5 stars0 ratingsVisual Studio Condensed: For Visual Studio 2013 Express, Professional, Premium and Ultimate Editions Rating: 0 out of 5 stars0 ratingsiOS Development with Xamarin Cookbook Rating: 0 out of 5 stars0 ratingsPractical Shader Development: Vertex and Fragment Shaders for Game Developers Rating: 0 out of 5 stars0 ratingsPro TypeScript: Application-Scale JavaScript Development Rating: 4 out of 5 stars4/5Java Spring Framework: From Basics to Expert Proficiency Rating: 0 out of 5 stars0 ratingsPthreads Complete Self-Assessment Guide Rating: 0 out of 5 stars0 ratingsPython, PyGame, and Raspberry Pi Game Development Rating: 0 out of 5 stars0 ratingsObjective-C for Absolute Beginners: iPhone, iPad and Mac Programming Made Easy Rating: 0 out of 5 stars0 ratingsGameSalad Essentials Rating: 0 out of 5 stars0 ratings
Programming For You
SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5Excel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5Python Programming : How to Code Python Fast In Just 24 Hours With 7 Simple Steps Rating: 4 out of 5 stars4/5Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5SQL: For Beginners: Your Guide To Easily Learn SQL Programming in 7 Days Rating: 5 out of 5 stars5/5Python QuickStart Guide: The Simplified Beginner's Guide to Python Programming Using Hands-On Projects and Real-World Applications Rating: 0 out of 5 stars0 ratingsC Programming For Beginners: The Simple Guide to Learning C Programming Language Fast! Rating: 5 out of 5 stars5/5HTML in 30 Pages Rating: 5 out of 5 stars5/5Tiny Python Projects: Learn coding and testing with puzzles and games Rating: 5 out of 5 stars5/5Learn PowerShell in a Month of Lunches, Fourth Edition: Covers Windows, Linux, and macOS Rating: 5 out of 5 stars5/5HTML & CSS: Learn the Fundaments in 7 Days Rating: 4 out of 5 stars4/5Linux: Learn in 24 Hours Rating: 5 out of 5 stars5/5C# Programming from Zero to Proficiency (Beginner): C# from Zero to Proficiency, #2 Rating: 0 out of 5 stars0 ratingsAssembly Programming:Simple, Short, And Straightforward Way Of Learning Assembly Language Rating: 5 out of 5 stars5/5Grokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5Spies, Lies, and Algorithms: The History and Future of American Intelligence Rating: 4 out of 5 stars4/5Lua Game Development Cookbook Rating: 0 out of 5 stars0 ratingsExcel 101: A Beginner's & Intermediate's Guide for Mastering the Quintessence of Microsoft Excel (2010-2019 & 365) in no time! Rating: 0 out of 5 stars0 ratingsA Slackers Guide to Coding with Python: Ultimate Beginners Guide to Learning Python Quick Rating: 0 out of 5 stars0 ratingsThe Ultimate Python Programming Guide For Beginner To Intermediate Rating: 5 out of 5 stars5/5
Reviews for Objective-C Memory Management Essentials
0 ratings0 reviews
Book preview
Objective-C Memory Management Essentials - Gibson Tang
Table of Contents
Objective-C Memory Management Essentials
Credits
About the Authors
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Introduction to Objective-C Memory Management
Why do we need memory management in Objective-C?
An object's ownership and life cycle
Ownership of object and reference counting
What's a memory leak and why pay attention to it?
What is an object within Objective-C?
Summary
2. Automatic Reference Counting
What is ARC and how does it work?
How ARC looks
Project settings for ARC
A memory model in Objective-C
What you need to know about ARC and weak references
Summary
3. Using Autorelease Pools
Understanding the autorelease pool mechanism
Autorelease pool mechanism
Reducing peak memory footprint with autorelease pool blocks
An overview of Apple autoreleased classes
NSRunLoop
NSException
ARC and autorelease
Autorelease pool blocks and threads
Summary
4. Object Creation and Storage
Creation and initialization of objects
What is a class?
Classes
Object immutability
Object mutability
Inheritance
Convenience initializers
An Objective-C programmer's responsibility
The singleton pattern
Creating @property
Creating custom methods
String formatting
Summary
5. Managing Your Application Data
Device memory
Image optimization
Lazy loading
Control creation
Caching
SDWebImage
Object serialization
SQLite
SQLite versus Core Data
Summary
6. Using Core Data for Persistence
Why use Core Data?
Understanding Core Data concepts
Putting it into practice
Getting into the code
Saving data into the persistent store
Deleting data from the persistent store
Updating data
Summary
7. Key-value Programming Approaches
What is key-value coding or KVC?
The NSKeyValueCoding protocol
Compliance of attributes and one-to-one relationships
Compliance of indexed one-to-many relationships
Compliance of unordered many-to-many relationships
Advantages of key-value coding
Disadvantages of key-value coding
Manual subsets of NSKeyValueCoding behavior
Advantages of creating your own lookup path
Disadvantages of creating your own lookup path
Associated objects
Advantages of using associated objects
Disadvantages of using associated objects
Selectors as keys
Advantages of using selectors as keys
Disadvantages of using selectors as keys
Maximum flexibility and handling unusual keys/values
Advantages of doing your own implementation
Disadvantages of doing your own implementation
Key-value observing
Implementing key-value observing
Performance considerations
Summary
8. Introduction to Swift
Welcome to Swift
Basics of Swift
Variable declaration
Iterating statements
Conditional statements
Functions
Classes and structures in Swift
Closures
Memory management in Swift
Summary
9. Memory Management and Debugging
Memory leaks
Strong/weak references
Retain cycles
Memory overuse
Using the debugger and breakpoints
Collecting data on your app
Plumbing memory leaks
Using the LLVM / Clang Static Analyzer
Using NSZombie
Summary
10. Tips and Tricks for Memory Management
Objective-C, C, and memory management
Getters and setters
The property attribute in Objective-C
Performance guidelines
Don't overthink about memory management
When to avoid KVC and KVO
Summary
11. Features of Xcode 6
Introducing Xcode 6
What's new in storyboard
Allowing storyboard or the NIB file to replace launch images
Launching images from your app
Universal storyboards
Debugging in Xcode 6
Debug gauges
What's new in Interface Builder
Playground for Swift
Summary
Index
Objective-C Memory Management Essentials
Objective-C Memory Management Essentials
Copyright © 2015 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: March 2015
Production reference: 1190315
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-84969-712-5
www.packtpub.com
Credits
Authors
Gibson Tang
Maxim Vasilkov
Reviewers
Emil Atanasov
Christine M. Gerpheide
Commissioning Editor
James Jones
Acquisition Editor
James Jones
Content Development Editor
Amey Varangaonkar
Technical Editor
Vijin Boricha
Copy Editor
Janbal Dharmaraj
Project Coordinator
Leena Purkait
Proofreaders
Simran Bhogal
Maria Gould
Indexer
Hemangini Bari
Graphics
Sheetal Aute
Production Coordinator
Melwyn D'sa
Cover Work
Melwyn D'sa
About the Authors
Gibson Tang grew up loving technology after getting his hands on an old Apple II when he was still a young kid. Since then, he has never stopped keeping pace with technology, and after he coded his first Hello World
program, he has been hooked on programming ever since.
Following his studies at Nanyang Polytechnic and Singapore Institute of Management and serving a 6-year stint in the Republic of Singapore Navy (RSN), he honed his development skills creating software and games for Yahoo! and other Fortune 500 companies. In 2010, he founded Azukisoft Pte Ltd in Singapore to focus on mobile application development. Since then, he has developed countless mobile applications and games for start-ups and big companies both in USA and Singapore.
Apart from programming, he indulges in various hobbies such as soccer, computer games, and jogging in order to get his regular dose of Vitamin D and to see the sun once in a while. Occasionally, he would be on Steam or Battle.net blowing off some steam by slaying monsters and killer robots after a day of programming.
I would like to thank the many people who have contributed to my knowledge of programming over the years. Some honorable mentions go out to the geeks and nerds of Hackerspace.sg as they have kept me in stitches with their geek jokes and anime. Next, a great thank you goes to Mugunth Kumar, who is an overflowing fountain of knowledge of all things related to Objective-C. Also, thanks to Subhransu Behera, the organizer of the iOS Dev Scout meetup group in Singapore and finally, to my colleagues at Azukisoft Pte Ltd, namely Igor and Dimitry, who have never failed to amaze me with all their new knowledge and things they have learned over the course of their work with me.
Maxim Vasilkov is a mobile software developer in Azukisoft Pte Ltd. He started programming over 10 years ago. He started with iOS when the SDK was made publicly available, and from that time onwards, he developed a passion for making mobile apps. He is also experienced with other programming languages and has expertise working with various team sizes, which gave him the opportunity to look at different approaches to programming. Outside of work, he is a proud father of beautiful triplets, Anna, Maria, and Victoria, who are now 4 years old. This has helped him try out mobile games for kids and enables him to be an expert in mobile games for kids.
I would like to dedicate this chapter to my lovely wife, Irina, and my three princesses, Anna, Maria, and Victoria. Last but not least, I'd like to thank my colleagues at Azukisoft Pte Ltd and Gibson Tang for giving me an opportunity to work on a lot of challenging projects.
About the Reviewers
Emil Atanasov is an IT consultant who has strong experience with mobile technologies. He is doing his MSc at RWTH Aachen University, Germany. He has worked for several huge USA companies and has been a freelancer for years. He has experience in software design and development, and personally, he has worked on the improvement of many mobile apps. At the moment, he is focused on the rapidly developing mobile sector.
As an Android team leader and senior developer, Emil was leading a team that was developing a part of the Nook Color firmware. This was an e-magazine/e-book reader, which supports the proprietary Barnes & Nobel and many other e-book formats.
Many of the apps that Emil has designed are using Flurry API to track different users' statistics. Based on this experience, he is one of the people behind the Getting Started with Flurry Analytics book.
I want to thank my family and friends for being so cool. Thank you for supporting me even though I'm such a bizarre person, who is investing so much of his time in the computer world. Thank you, guys!
Christine M. Gerpheide is a software development engineer at Amazon Web Services. She completed her master's in computer science and engineering with honors from Eindhoven University of Technology in the Netherlands, before which she worked in Greece as a web developer. During her career, Christine has worked on a wide range of software, including service-oriented architectures, model-driven engineering, and mobile development. During her free time, she hikes, runs, and plays violin. Other books reviewed by Christine include TYPO3 Templates by Packt Publishing, and she has presented at a number of scientific and open source conferences.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
Preface
Managing memory is one of the toughest problems we deal with in Objective-C. This book will provide you with the most important information about effective memory management in your applications.
The practical element will also ensure that the programmers can actively learn key methods and concepts of memory management in a more engaging way rather than just simply read the book. Throughout this book, I will be giving examples of code.
These example code will demonstrate the fundamentals of programming and memory management as well as cover some aspects of iOS development such as Core Data. All these Xcode projects are ready to run out of the box and you do not need any additional setup to run the code. Just make sure that you have the the latest version of Xcode, which is version 6 at this point in time.
So, this book will help you become aware of memory management and how to implement this correctly and effectively while being aware of the benefits at the same time. This tutorial-based book will actively demonstrate techniques for the implementation of memory management, showing the resultant effects on performance and effective implementation.
I have to mention that in this book, I will speak about the most recent standard of Objective-C and Objective-C 2.0. Apple suggests Objective-C as a main tool of development for their platform and strives to improve the product continuously.
I must say that not all of Apple's attempts to improve Objective-C have been entirely successful. Garbage collection is an example of ineffective memory management. It is deprecated since OS X Version 10.8 in favor of Automatic Reference Counting (ARC) and is scheduled to be removed in a future version of OS X.
I have been working with Objective-C for years and C++ for even longer. Hence, memory management is not an alien concept to me as I have been debugging and tracing memory leaks for years in the course of my work at Azukisoft Pte Ltd.
At my job at Azukisoft Pte Ltd, I work mostly with Objective-C but with the occasional C++ thrown into the mix. And this is a very interesting combination, which will be highlighted in this book too.
What this book covers
Chapter 1, Introduction to Objective-C Memory Management, will introduce you to reference counting, Manual Retain Release (MRR), object ownership, sand life cycle, and memory leaks.
Chapter 2, Automatic Reference Counting, will introduce you to ARC and how it works, its advantages, and how to set up your projects to use ARC, memory models in Objective-C, and UIKit with ARC.
Chapter 3, Using Autorelease Pools, introduces you to autorelease pools, autorelease pools mechanics, Apple-autoreleased classes overview, ARC and autorelease, and blocks and threads.
Chapter 4, Object Creation and Storage, will cover the different ways to create objects; a comparison of different memory management options: ARC, MRC, autorelease pools, garbage collection, memory models; and how @property makes your life easier.
Chapter 5, Managing Your Application Data, will cover disk cache, UI techniques of partial data display, serialization and archiving objects, methods to encode and decode objects, cases when you need SQLite, and SQLite versus Core Data.
Chapter 6, Using Core Data for Persistence, explains what Core Data is and why you should use it, NSManagedObject and its use in your application, memory management when using Core Data, and the common errors.
Chapter 7, Key-value Programming Approaches, explains what key-value coding or KVC is, the NSKeyValueCoding protocol, manual subsets of NSKeyValueCoding behavior, associated objects, selectors as keys, maximum flexibility, and handling keys/values.
Chapter 8, Introduction to Swift, highlights Cocoa binding in OS X, differences between automatic and manual key-value observing, and how key-value observation is implemented.
Chapter 9, Memory Management and Debugging, covers memory overuse, collecting data on your app, how to use instruments in Xcode, using the LLVM/Clang Static Analyzer, using NSZombie to help find an over-released object, and plumbing leaks.
Chapter 10, Tips