Junior — Middle
How to organize object references to prevent cyclic memory retention?
sobes.tech AI
Answer from AI
To prevent retain cycles in the object model on iOS (using Swift or Objective-C), it is important to correctly use strong, weak, and unowned references.
Main idea:
- strong — owning reference, increases the reference count of the object.
- weak — non-owning reference, does not increase the count, automatically set to nil when the object is deallocated.
- unowned — non-owning reference, does not increase the count, but not set to nil, used when the object is guaranteed to outlive the reference.
Cycles often occur, for example, between a parent and a child or between a delegate and an object. To avoid a cycle:
- The parent holds the child via strong.
- The child references the parent via weak or unowned.
Example in Swift:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // weak reference to avoid cycle
}
let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent
Thus, when parent and child are no longer used, memory is released correctly, without leaks caused by cycles.