Objective-C
delegates
property management
assign vs retain
memory management

Why are Objective-C delegates usually given the property assign instead of retain?

Data Structures & Algorithms practice on Codemia

Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.

Practice algorithms

Objective-C is a mature and dynamic object-oriented programming language that has been a foundational technology for Mac and iOS applications. One of the key patterns in Objective-C development is the use of delegates, particularly within the Cocoa and Cocoa Touch frameworks. Delegation is a design pattern that enables one object to communicate back to its owning or controlling object in a decoupled way.

A frequent question in the Objective-C community relates to the use of the assign property attribute for delegate properties, as opposed to retain or strong . Understanding the rationale behind these choices is crucial to leverage this pattern effectively while avoiding common pitfalls.

Delegates in Objective-C

In Objective-C, a delegate is typically an object that implements a set of methods defined in a protocol. It receives messages or callbacks from another object, known as the delegating object. For example, an UITableView sends messages to its delegate to configure cells, respond to user selections, etc.

Property Attributes: assign

, retain , and strong

Objective-C uses Automatic Reference Counting (ARC) to manage memory. When declaring properties in Objective-C, developers specify attribute keywords to define how memory management for that property should be handled.

  • **assign **: This attribute does not change the reference count of the object when it's assigned to a property. It simply assigns the address of the object to the property. It's often used for primitive data types (e.g., int , float ).
  • **retain /strong **: These attributes, used with object types, increase the reference count of the assigned object to ensure it stays in memory as long as the reference is held. strong is the ARC equivalent of pre-ARC retain .

Why Use assign

for Delegate Properties?

The choice to use assign over retain for delegate properties primarily hinges on avoiding retain cycles. A retain cycle occurs when two objects retain each other, prohibiting their deallocation and thus causing memory leaks.

Example of a Retain Cycle

Consider a scenario involving two objects, A and B , where A holds a strong reference to B , and B holds a strong reference to A . This mutual strong referencing creates a retain cycle.


Related reading
Course
Intermediate
27 lessons
15 hours
DSA Fundamentals

Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Data Structures & Algorithms practice on Codemia

Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.

Practice algorithms

All Rights Reserved.