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.
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.strongis the ARC equivalent of pre-ARCretain.
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
- Why are operators so much slower than method calls? structs are slower only on older JITs
- Why are Python's arrays slow?
- Why are some float integer comparisons four times slower than others?
- Why aren't my scala futures more efficient?
- Why best case for insertion sort is On not On2?
- Why big-Oh is not always a worst case analysis of an algorithm?
- Why binary_crossentropy and categorical_crossentropy give different performances for the same problem?
- Why both training and testing loss decrease as I add more training data incrementally?

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 courseTrack 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.