SlideShare a Scribd company logo
1 of 19
Memory Management in iOS
COMPILED BY: ASIM RAIS SIDDIQUI
Table of Contents
 Overview
 Reference counting in Objective C
 Taking ownership of an object
 The Four Basic Rules
 ARC
Overview
 You manage memory in iOS4 and below
 iOS5 and above –Automaticc Reference Counting (ARC) available
Reference Counting in Objective‐C
 When an object is created, it has a reference count of 1. The
creator is the owner.
 Every time, a new owner is added, the reference count increases by
1
 Every time, a owner relinquishes control , the reference count
decreases by 1
 When reference count is 0, runtime destroys the object by calling
dealloc() on it.
– You never call dealloc() directly. release does it automatically
Taking ownership of an object
 Create an object
– alloc, new, copy!
 Using “retain”
– Retain the object to ensure it is not deallocated elsewhere
 Strong References
– Object not freed as long as there is a strong reference to it. Use
“retain”
@property (retain) id myProperty; // iOS <= 4.3
@property (strong) id myProperty; // iOS 5+
Relinquishing ownership of an
Object
 Explicitly using release
– Object deallocated as soon as reference count is 0 • Put it in an
autorelease pool.
 System takes care of deallocating unreferenced objects
periodically from autorelease pool at some later time
The Four Basic Rules
 There are only 4 basic rules when it comes to memory management
in Objective-C:
1. If you own it, release it.
2. If you don’t own it, don’t release it.
3. Override dealloc in your classes to release the fields that you own.
4. Never call dealloc directly.
 That’s it. The first two are the most important and we’ll get into the
basics of object ownership next.
How easy is that? I can’t even think
of anything more to write about
this, it’s that simple. But to reiterate:
You own it if you alloc it.
You own it if you copy it.
You own it if you new it. (New is
simply a shortcut for alloc/init).
In the above example, our SomeObject has two fields: things and someOtherThings. You can see in our init method
that we create the objects and assign them to our properties. For things, because we are using [NSMutableArray
arrayWithObjects:], we have to call retain. Remember, we didn’t alloc, copy or new, instead we called a
convenience method that returns an autoreleased object that we must explicitly retain. What is autorelease you
might be asking? I’ll explain in the next part, but for now all you have to remember is the basics of object ownership
described above.
In the [dealloc] method you’ll see that we are releasing the objects we created. Nothing more, nothing less.
Properties
 There is really only two rules:
 If you retain or copy your property, you need to set it to nil in your
dealloc.
 If you initialize the property during init, autorelease it.
The title property we are calling a convenience method on NSString that returns an autoreleased object, so we don’t have to do a
thing. For subtitle, we are allocating a new NSString ourselves, therefore we need to autorelease it. The reason being is that when the
value is assigned to the property, the retain count is incremented by 1, so without the autorelease, that object will maintain a retain
count of 2 (one for the alloc/init and another for the assignment to the property). With a retain count of 2, the object will never be
released and you’ll leak memory.
Autorelease?
 Ok, I totally lied as there is one more complicated aspect to this
whole thing, and that complexity comes in the form of Autorelease
Pools. The heck is that? Autorelease pools maintain a list of objects
that will be sent release messages when those pools are destroyed.
You really needn’t worry about when all of that happens, but rest
assured that your autorelease objects are, if everything is done
correctly, being released without your explicit telling it to do so.
 Following our rules of object ownership, one has to wonder what
happens to objects that are returned from methods. Who owns
those? This is where autorelease and autorelease pools come in to
play. For example:
 Notice the autorelease message
at the end. What happens
when autorelease is called, the
object in question is added to
an autorelease pool so that it
will receive a release message
when the pool is destroyed. The
caller needn’t have to worry
about it, nor does the callee.
 Autorelease pools can be
nested, too. This is great for
situations where you are
creating thousands upon
thousands of temporary objects
and want to keep your
maximum memory footprint slim
and tight. Also, if you are doing
threaded work, anytime you
create a new thread, you’ll
have to create an autorelease
pool for that thread.
Automatic Reference Counting
 Introduced in iOS5
 You don’t need to specify retain/release
 Compiler inserts the retain/release code for you
 ARC frees objects as soon as all strong references to it go away
 It’s not Garbage CollecBon
Automatic Reference Counting
 If you are working with existing code, you can convert it to use ARC
by going to the Edit menu, and under the Refactor sub-menu you
will see “Convert to Objective-C ARC” as a choice. There is also a
compiler flag (-fobjc-arc) to enable ARC. You can also go into the
build options for a project (select the project, go to advanced build
options, and it is near the bottom)
 Within your code, you can now use the “strong” and “weak”
keywords in your object instantiation. With these, the compiler
understands how to handle the memory for the object. What’s the
difference? From the book Learning iPad Programming by Kirby
Turner and Tom Harrington (the book I have been using to learn iOS
development):
 A strong property is claiming “ownership,” and its object is
automatically released when the object is no longer referenced. A
weak property does not extend the lifetime of the object. In other
words, it does not assume ownership, so it is possible that the object
is released while the property has a reference to it. However, weak
properties are automatically set to nil when the object is released.

More Related Content

What's hot

Spring Boot & Actuators
Spring Boot & ActuatorsSpring Boot & Actuators
Spring Boot & ActuatorsVMware Tanzu
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event HandlingWebStackAcademy
 
Angular 8
Angular 8 Angular 8
Angular 8 Sunil OS
 
Developing for Node.JS with MySQL and NoSQL
Developing for Node.JS with MySQL and NoSQLDeveloping for Node.JS with MySQL and NoSQL
Developing for Node.JS with MySQL and NoSQLJohn David Duncan
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentationivpol
 
Model view controller (mvc)
Model view controller (mvc)Model view controller (mvc)
Model view controller (mvc)M Ahsan Khan
 
Scalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureScalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureNicholas Zakas
 
Java Garbage Collection - How it works
Java Garbage Collection - How it worksJava Garbage Collection - How it works
Java Garbage Collection - How it worksMindfire Solutions
 
Basic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBasic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBhargav Anadkat
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3 ArezooKmn
 
Nodejs functions & modules
Nodejs functions & modulesNodejs functions & modules
Nodejs functions & modulesmonikadeshmane
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEMAccunity Software
 
Android activities & views
Android activities & viewsAndroid activities & views
Android activities & viewsma-polimi
 

What's hot (20)

Mvc architecture
Mvc architectureMvc architecture
Mvc architecture
 
Basics of VueJS
Basics of VueJSBasics of VueJS
Basics of VueJS
 
Spring Boot & Actuators
Spring Boot & ActuatorsSpring Boot & Actuators
Spring Boot & Actuators
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event Handling
 
Angular 8
Angular 8 Angular 8
Angular 8
 
Developing for Node.JS with MySQL and NoSQL
Developing for Node.JS with MySQL and NoSQLDeveloping for Node.JS with MySQL and NoSQL
Developing for Node.JS with MySQL and NoSQL
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
Model view controller (mvc)
Model view controller (mvc)Model view controller (mvc)
Model view controller (mvc)
 
Spring ppt
Spring pptSpring ppt
Spring ppt
 
Hibernate
HibernateHibernate
Hibernate
 
Vue js for beginner
Vue js for beginner Vue js for beginner
Vue js for beginner
 
WEB DEVELOPMENT USING REACT JS
 WEB DEVELOPMENT USING REACT JS WEB DEVELOPMENT USING REACT JS
WEB DEVELOPMENT USING REACT JS
 
Scalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureScalable JavaScript Application Architecture
Scalable JavaScript Application Architecture
 
Java Garbage Collection - How it works
Java Garbage Collection - How it worksJava Garbage Collection - How it works
Java Garbage Collection - How it works
 
Basic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBasic Concept of Node.js & NPM
Basic Concept of Node.js & NPM
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3
 
Android UI
Android UIAndroid UI
Android UI
 
Nodejs functions & modules
Nodejs functions & modulesNodejs functions & modules
Nodejs functions & modules
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEM
 
Android activities & views
Android activities & viewsAndroid activities & views
Android activities & views
 

Viewers also liked

iOS Memory Management Basics
iOS Memory Management BasicsiOS Memory Management Basics
iOS Memory Management BasicsBilue
 
Memory management in Objective C
Memory management in Objective CMemory management in Objective C
Memory management in Objective CNeha Gupta
 
Advanced Memory Management on iOS and Android - Mark Probst and Rodrigo Kumpera
Advanced Memory Management on iOS and Android - Mark Probst and Rodrigo KumperaAdvanced Memory Management on iOS and Android - Mark Probst and Rodrigo Kumpera
Advanced Memory Management on iOS and Android - Mark Probst and Rodrigo KumperaXamarin
 
Xamarin.android memory management gotchas
Xamarin.android memory management gotchasXamarin.android memory management gotchas
Xamarin.android memory management gotchasAlec Tucker
 
Memory management in iOS.
Memory management in iOS.Memory management in iOS.
Memory management in iOS.HSIEH CHING-FAN
 
Apple iOS - A modern way to mobile operating system
Apple iOS - A modern way to mobile operating systemApple iOS - A modern way to mobile operating system
Apple iOS - A modern way to mobile operating systemDhruv Patel
 
Apple iOS Introduction
Apple iOS IntroductionApple iOS Introduction
Apple iOS IntroductionPratik Vyas
 
Memory Management In Swift
Memory Management In SwiftMemory Management In Swift
Memory Management In SwiftHossam Ghareeb
 
Property and MM with ARC in Objective-C
Property and MM with ARC in Objective-CProperty and MM with ARC in Objective-C
Property and MM with ARC in Objective-CYo Yo Chen
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Countingpragmamark
 
Memory Management in RubyMotion
Memory Management in RubyMotionMemory Management in RubyMotion
Memory Management in RubyMotionMichael Denomy
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference CountingGiuseppe Arici
 
Threading in iOS / Cocoa Touch
Threading in iOS / Cocoa TouchThreading in iOS / Cocoa Touch
Threading in iOS / Cocoa Touchmobiledeveloperpl
 
ARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーSatoshi Asano
 
Unix Process management
Unix Process managementUnix Process management
Unix Process managementWave Digitech
 

Viewers also liked (20)

iOS Memory Management Basics
iOS Memory Management BasicsiOS Memory Management Basics
iOS Memory Management Basics
 
Memory management in Objective C
Memory management in Objective CMemory management in Objective C
Memory management in Objective C
 
Advanced Memory Management on iOS and Android - Mark Probst and Rodrigo Kumpera
Advanced Memory Management on iOS and Android - Mark Probst and Rodrigo KumperaAdvanced Memory Management on iOS and Android - Mark Probst and Rodrigo Kumpera
Advanced Memory Management on iOS and Android - Mark Probst and Rodrigo Kumpera
 
Android & IOS
Android & IOSAndroid & IOS
Android & IOS
 
Xamarin.android memory management gotchas
Xamarin.android memory management gotchasXamarin.android memory management gotchas
Xamarin.android memory management gotchas
 
Memory management in iOS.
Memory management in iOS.Memory management in iOS.
Memory management in iOS.
 
Apple iOS - A modern way to mobile operating system
Apple iOS - A modern way to mobile operating systemApple iOS - A modern way to mobile operating system
Apple iOS - A modern way to mobile operating system
 
Apple iOS Introduction
Apple iOS IntroductionApple iOS Introduction
Apple iOS Introduction
 
Objective C Memory Management
Objective C Memory ManagementObjective C Memory Management
Objective C Memory Management
 
Memory Management In Swift
Memory Management In SwiftMemory Management In Swift
Memory Management In Swift
 
Property and MM with ARC in Objective-C
Property and MM with ARC in Objective-CProperty and MM with ARC in Objective-C
Property and MM with ARC in Objective-C
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
 
Ios - Introduction to memory management
Ios - Introduction to memory managementIos - Introduction to memory management
Ios - Introduction to memory management
 
Memory Management in RubyMotion
Memory Management in RubyMotionMemory Management in RubyMotion
Memory Management in RubyMotion
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
 
Threading in iOS / Cocoa Touch
Threading in iOS / Cocoa TouchThreading in iOS / Cocoa Touch
Threading in iOS / Cocoa Touch
 
ARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマー
 
Unix Process management
Unix Process managementUnix Process management
Unix Process management
 
12 deadlock concept
12 deadlock concept12 deadlock concept
12 deadlock concept
 
iOS Ecosystem
iOS EcosystemiOS Ecosystem
iOS Ecosystem
 

Similar to iOS Memory Management

[Objective-C] Objective-C의 메모리 관리 방법
[Objective-C] Objective-C의 메모리 관리 방법[Objective-C] Objective-C의 메모리 관리 방법
[Objective-C] Objective-C의 메모리 관리 방법Theodore(Yongbin) Cha
 
Why using finalizers is a bad idea
Why using finalizers is a bad ideaWhy using finalizers is a bad idea
Why using finalizers is a bad ideaPVS-Studio
 
Javascript Objects Deep Dive
Javascript Objects Deep DiveJavascript Objects Deep Dive
Javascript Objects Deep DiveManish Jangir
 
Avoid memory leaks using unit tests - Swift Delhi Meetup - Chapter 15
Avoid memory leaks using unit tests - Swift Delhi Meetup - Chapter 15Avoid memory leaks using unit tests - Swift Delhi Meetup - Chapter 15
Avoid memory leaks using unit tests - Swift Delhi Meetup - Chapter 15Raunak Talwar
 
Method Swizzling with Objective-C
Method Swizzling with Objective-CMethod Swizzling with Objective-C
Method Swizzling with Objective-CAdamFallon4
 
Garbage collector complete information
Garbage collector complete informationGarbage collector complete information
Garbage collector complete informationMubarak Hussain
 
Ios development
Ios developmentIos development
Ios developmentelnaqah
 
Javascript Prototypal Inheritance - Big Picture
Javascript Prototypal Inheritance - Big PictureJavascript Prototypal Inheritance - Big Picture
Javascript Prototypal Inheritance - Big PictureManish Jangir
 
C++ Introduction brown bag
C++ Introduction brown bagC++ Introduction brown bag
C++ Introduction brown bagJacob Green
 
01class_object_references & 02Generation_GC.pptx
01class_object_references & 02Generation_GC.pptx01class_object_references & 02Generation_GC.pptx
01class_object_references & 02Generation_GC.pptxssuser95922e
 
iPhone Seminar Part 2
iPhone Seminar Part 2iPhone Seminar Part 2
iPhone Seminar Part 2NAILBITER
 
Garbage collection
Garbage collectionGarbage collection
Garbage collectionSomya Bagai
 
ConsTRUCTION AND DESTRUCTION
ConsTRUCTION AND DESTRUCTIONConsTRUCTION AND DESTRUCTION
ConsTRUCTION AND DESTRUCTIONShweta Shah
 
Object Oriented PHP - PART-1
Object Oriented PHP - PART-1Object Oriented PHP - PART-1
Object Oriented PHP - PART-1Jalpesh Vasa
 
Closer Look - iPhone programming
Closer Look - iPhone programmingCloser Look - iPhone programming
Closer Look - iPhone programmingSujith Krishnan
 

Similar to iOS Memory Management (20)

Lecture 3-ARC
Lecture 3-ARCLecture 3-ARC
Lecture 3-ARC
 
[Objective-C] Objective-C의 메모리 관리 방법
[Objective-C] Objective-C의 메모리 관리 방법[Objective-C] Objective-C의 메모리 관리 방법
[Objective-C] Objective-C의 메모리 관리 방법
 
Memory management
Memory managementMemory management
Memory management
 
Why using finalizers is a bad idea
Why using finalizers is a bad ideaWhy using finalizers is a bad idea
Why using finalizers is a bad idea
 
Memory management ARC
Memory management ARCMemory management ARC
Memory management ARC
 
Javascript Objects Deep Dive
Javascript Objects Deep DiveJavascript Objects Deep Dive
Javascript Objects Deep Dive
 
Avoid memory leaks using unit tests - Swift Delhi Meetup - Chapter 15
Avoid memory leaks using unit tests - Swift Delhi Meetup - Chapter 15Avoid memory leaks using unit tests - Swift Delhi Meetup - Chapter 15
Avoid memory leaks using unit tests - Swift Delhi Meetup - Chapter 15
 
Method Swizzling with Objective-C
Method Swizzling with Objective-CMethod Swizzling with Objective-C
Method Swizzling with Objective-C
 
Garbage collector complete information
Garbage collector complete informationGarbage collector complete information
Garbage collector complete information
 
Ios development
Ios developmentIos development
Ios development
 
Javascript Prototypal Inheritance - Big Picture
Javascript Prototypal Inheritance - Big PictureJavascript Prototypal Inheritance - Big Picture
Javascript Prototypal Inheritance - Big Picture
 
C++ Introduction brown bag
C++ Introduction brown bagC++ Introduction brown bag
C++ Introduction brown bag
 
01class_object_references & 02Generation_GC.pptx
01class_object_references & 02Generation_GC.pptx01class_object_references & 02Generation_GC.pptx
01class_object_references & 02Generation_GC.pptx
 
iPhone Seminar Part 2
iPhone Seminar Part 2iPhone Seminar Part 2
iPhone Seminar Part 2
 
13 life and scope
13 life and scope13 life and scope
13 life and scope
 
About Python
About PythonAbout Python
About Python
 
Garbage collection
Garbage collectionGarbage collection
Garbage collection
 
ConsTRUCTION AND DESTRUCTION
ConsTRUCTION AND DESTRUCTIONConsTRUCTION AND DESTRUCTION
ConsTRUCTION AND DESTRUCTION
 
Object Oriented PHP - PART-1
Object Oriented PHP - PART-1Object Oriented PHP - PART-1
Object Oriented PHP - PART-1
 
Closer Look - iPhone programming
Closer Look - iPhone programmingCloser Look - iPhone programming
Closer Look - iPhone programming
 

More from Asim Rais Siddiqui

Understanding Blockchain Technology
Understanding Blockchain TechnologyUnderstanding Blockchain Technology
Understanding Blockchain TechnologyAsim Rais Siddiqui
 
IoT Development - Opportunities and Challenges
IoT Development - Opportunities and ChallengesIoT Development - Opportunities and Challenges
IoT Development - Opportunities and ChallengesAsim Rais Siddiqui
 
iOS Development (Part 3) - Additional GUI Components
iOS Development (Part 3) - Additional GUI ComponentsiOS Development (Part 3) - Additional GUI Components
iOS Development (Part 3) - Additional GUI ComponentsAsim Rais Siddiqui
 
Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Asim Rais Siddiqui
 
Introduction to iOS Development
Introduction to iOS DevelopmentIntroduction to iOS Development
Introduction to iOS DevelopmentAsim Rais Siddiqui
 

More from Asim Rais Siddiqui (8)

Understanding Blockchain Technology
Understanding Blockchain TechnologyUnderstanding Blockchain Technology
Understanding Blockchain Technology
 
IoT Development - Opportunities and Challenges
IoT Development - Opportunities and ChallengesIoT Development - Opportunities and Challenges
IoT Development - Opportunities and Challenges
 
iOS Development (Part 3) - Additional GUI Components
iOS Development (Part 3) - Additional GUI ComponentsiOS Development (Part 3) - Additional GUI Components
iOS Development (Part 3) - Additional GUI Components
 
iOS Development (Part 2)
iOS Development (Part 2)iOS Development (Part 2)
iOS Development (Part 2)
 
iOS Development (Part 1)
iOS Development (Part 1)iOS Development (Part 1)
iOS Development (Part 1)
 
Introduction to Objective - C
Introduction to Objective - CIntroduction to Objective - C
Introduction to Objective - C
 
Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#
 
Introduction to iOS Development
Introduction to iOS DevelopmentIntroduction to iOS Development
Introduction to iOS Development
 

Recently uploaded

Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Recently uploaded (20)

Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

iOS Memory Management

  • 1. Memory Management in iOS COMPILED BY: ASIM RAIS SIDDIQUI
  • 2. Table of Contents  Overview  Reference counting in Objective C  Taking ownership of an object  The Four Basic Rules  ARC
  • 3. Overview  You manage memory in iOS4 and below  iOS5 and above –Automaticc Reference Counting (ARC) available
  • 4. Reference Counting in Objective‐C  When an object is created, it has a reference count of 1. The creator is the owner.  Every time, a new owner is added, the reference count increases by 1  Every time, a owner relinquishes control , the reference count decreases by 1  When reference count is 0, runtime destroys the object by calling dealloc() on it. – You never call dealloc() directly. release does it automatically
  • 5.
  • 6. Taking ownership of an object  Create an object – alloc, new, copy!  Using “retain” – Retain the object to ensure it is not deallocated elsewhere  Strong References – Object not freed as long as there is a strong reference to it. Use “retain” @property (retain) id myProperty; // iOS <= 4.3 @property (strong) id myProperty; // iOS 5+
  • 7. Relinquishing ownership of an Object  Explicitly using release – Object deallocated as soon as reference count is 0 • Put it in an autorelease pool.  System takes care of deallocating unreferenced objects periodically from autorelease pool at some later time
  • 8. The Four Basic Rules  There are only 4 basic rules when it comes to memory management in Objective-C: 1. If you own it, release it. 2. If you don’t own it, don’t release it. 3. Override dealloc in your classes to release the fields that you own. 4. Never call dealloc directly.  That’s it. The first two are the most important and we’ll get into the basics of object ownership next.
  • 9. How easy is that? I can’t even think of anything more to write about this, it’s that simple. But to reiterate: You own it if you alloc it. You own it if you copy it. You own it if you new it. (New is simply a shortcut for alloc/init).
  • 10.
  • 11. In the above example, our SomeObject has two fields: things and someOtherThings. You can see in our init method that we create the objects and assign them to our properties. For things, because we are using [NSMutableArray arrayWithObjects:], we have to call retain. Remember, we didn’t alloc, copy or new, instead we called a convenience method that returns an autoreleased object that we must explicitly retain. What is autorelease you might be asking? I’ll explain in the next part, but for now all you have to remember is the basics of object ownership described above. In the [dealloc] method you’ll see that we are releasing the objects we created. Nothing more, nothing less.
  • 12. Properties  There is really only two rules:  If you retain or copy your property, you need to set it to nil in your dealloc.  If you initialize the property during init, autorelease it.
  • 13. The title property we are calling a convenience method on NSString that returns an autoreleased object, so we don’t have to do a thing. For subtitle, we are allocating a new NSString ourselves, therefore we need to autorelease it. The reason being is that when the value is assigned to the property, the retain count is incremented by 1, so without the autorelease, that object will maintain a retain count of 2 (one for the alloc/init and another for the assignment to the property). With a retain count of 2, the object will never be released and you’ll leak memory.
  • 14. Autorelease?  Ok, I totally lied as there is one more complicated aspect to this whole thing, and that complexity comes in the form of Autorelease Pools. The heck is that? Autorelease pools maintain a list of objects that will be sent release messages when those pools are destroyed. You really needn’t worry about when all of that happens, but rest assured that your autorelease objects are, if everything is done correctly, being released without your explicit telling it to do so.  Following our rules of object ownership, one has to wonder what happens to objects that are returned from methods. Who owns those? This is where autorelease and autorelease pools come in to play. For example:
  • 15.  Notice the autorelease message at the end. What happens when autorelease is called, the object in question is added to an autorelease pool so that it will receive a release message when the pool is destroyed. The caller needn’t have to worry about it, nor does the callee.  Autorelease pools can be nested, too. This is great for situations where you are creating thousands upon thousands of temporary objects and want to keep your maximum memory footprint slim and tight. Also, if you are doing threaded work, anytime you create a new thread, you’ll have to create an autorelease pool for that thread.
  • 16. Automatic Reference Counting  Introduced in iOS5  You don’t need to specify retain/release  Compiler inserts the retain/release code for you  ARC frees objects as soon as all strong references to it go away  It’s not Garbage CollecBon
  • 17. Automatic Reference Counting  If you are working with existing code, you can convert it to use ARC by going to the Edit menu, and under the Refactor sub-menu you will see “Convert to Objective-C ARC” as a choice. There is also a compiler flag (-fobjc-arc) to enable ARC. You can also go into the build options for a project (select the project, go to advanced build options, and it is near the bottom)
  • 18.
  • 19.  Within your code, you can now use the “strong” and “weak” keywords in your object instantiation. With these, the compiler understands how to handle the memory for the object. What’s the difference? From the book Learning iPad Programming by Kirby Turner and Tom Harrington (the book I have been using to learn iOS development):  A strong property is claiming “ownership,” and its object is automatically released when the object is no longer referenced. A weak property does not extend the lifetime of the object. In other words, it does not assume ownership, so it is possible that the object is released while the property has a reference to it. However, weak properties are automatically set to nil when the object is released.