Bird
Raised Fist0
Swiftprogramming~5 mins

ARC overview for memory management in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does ARC stand for in Swift?
ARC stands for Automatic Reference Counting. It helps manage memory by keeping track of how many references point to an object.
Click to reveal answer
beginner
How does ARC decide when to free an object?
ARC frees an object when its reference count drops to zero, meaning no part of the code is using it anymore.
Click to reveal answer
beginner
What is a strong reference in ARC?
A strong reference is the default way Swift keeps an object alive by increasing its reference count when assigned.
Click to reveal answer
intermediate
What problem can strong reference cycles cause?
Strong reference cycles happen when two objects hold strong references to each other, preventing ARC from freeing them and causing memory leaks.
Click to reveal answer
intermediate
How can you break a strong reference cycle in Swift?
You can use weak or unowned references to break strong reference cycles. These references do not increase the reference count.
Click to reveal answer
What happens when an object's reference count reaches zero in ARC?
AThe object is deallocated and memory is freed.
BThe object is copied to a new memory location.
CThe object is marked as read-only.
DNothing happens; the object stays in memory.
Which type of reference increases an object's reference count in Swift ARC?
AWeak reference
BUnowned reference
CNone of the above
DStrong reference
What keyword is used in Swift to declare a weak reference?
Aunowned
Bweak
Cstrong
Dvar
Why are strong reference cycles problematic?
AThey prevent ARC from freeing memory, causing leaks.
BThey delete objects too early.
CThey slow down the CPU.
DThey cause the program to crash immediately.
Which reference type should you use when you know the referenced object will always exist during the reference's lifetime?
Astrong
Bweak
Cunowned
Doptional
Explain how ARC manages memory in Swift and what happens when an object's reference count changes.
Think about how Swift keeps track of who is using an object.
You got /3 concepts.
    Describe what a strong reference cycle is and how to prevent it in Swift.
    Consider how two friends holding hands tightly might never let go.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does ARC stand for in Swift's memory management?
      easy
      A. Active Reference Control
      B. Automatic Resource Control
      C. Asynchronous Runtime Code
      D. Automatic Reference Counting

      Solution

      1. Step 1: Understand the acronym ARC

        ARC in Swift stands for Automatic Reference Counting, which manages memory automatically.
      2. Step 2: Eliminate incorrect options

        Other options do not match the correct term used in Swift memory management.
      3. Final Answer:

        Automatic Reference Counting -> Option D
      4. Quick Check:

        ARC = Automatic Reference Counting [OK]
      Hint: Remember ARC counts references automatically [OK]
      Common Mistakes:
      • Confusing ARC with manual memory management
      • Thinking ARC stands for resource control
      • Mixing ARC with asynchronous code concepts
      2. Which of the following is the correct way to declare a class in Swift that ARC will manage?
      easy
      A. struct Person {}
      B. class Person {}
      C. func Person() {}
      D. var Person = {}

      Solution

      1. Step 1: Identify ARC-managed types

        ARC manages memory for class instances, so classes are declared with class.
      2. Step 2: Check syntax correctness

        class Person {} is the correct syntax for a class in Swift.
      3. Final Answer:

        class Person {} -> Option B
      4. Quick Check:

        Class declaration = class Person {} [OK]
      Hint: ARC manages classes, not structs or functions [OK]
      Common Mistakes:
      • Using struct instead of class for ARC examples
      • Trying to declare a class with func or var
      • Confusing function and class syntax
      3. Consider the following Swift code:
      class Dog {}
      var dog1: Dog? = Dog()
      var dog2 = dog1
       dog1 = nil
      print(dog2 == nil)

      What will be printed?
      medium
      A. true
      B. Compile error
      C. false
      D. nil

      Solution

      1. Step 1: Analyze reference assignments

        dog1 is assigned a Dog instance, dog2 copies the reference from dog1, so both point to the same object.
      2. Step 2: Effect of setting dog1 to nil

        Setting dog1 to nil removes one reference, but dog2 still holds the reference, so the object remains alive.
      3. Step 3: Evaluate print statement

        dog2 is not nil, so dog2 == nil is false, so it prints false.
      4. Final Answer:

        false -> Option C
      5. Quick Check:

        dog2 still references object = false [OK]
      Hint: Setting one reference nil doesn't free object if others exist [OK]
      Common Mistakes:
      • Assuming dog2 becomes nil when dog1 is nil
      • Confusing reference assignment with copying object
      • Expecting a compile error due to optional usage
      4. What is the problem with this Swift code snippet related to ARC?
      class Person {
        var friend: Person?
      }
      
      var alice: Person? = Person()
      alice?.friend = alice
      alice = nil
      medium
      A. Memory leak due to strong reference cycle
      B. Compile error because of optional chaining
      C. No problem, memory is freed correctly
      D. Runtime crash due to nil assignment

      Solution

      1. Step 1: Identify reference cycle

        alice references a Person instance, and that instance's friend property points back to alice, creating a strong cycle.
      2. Step 2: Effect on ARC

        Because both references are strong, ARC cannot free the Person instance even after alice is set to nil, causing a memory leak.
      3. Final Answer:

        Memory leak due to strong reference cycle -> Option A
      4. Quick Check:

        Strong cycle prevents deallocation = memory leak [OK]
      Hint: Strong references pointing to each other cause leaks [OK]
      Common Mistakes:
      • Thinking optional chaining causes compile error
      • Assuming ARC frees memory despite cycles
      • Believing nil assignment crashes program
      5. You want to avoid a strong reference cycle between two classes Owner and Pet. Which is the best way to declare the reference from Pet to Owner to prevent memory leaks?
      hard
      A. Declare the reference as weak var owner: Owner?
      B. Declare the reference as var owner: Owner
      C. Declare the reference as unowned var owner: Owner?
      D. Declare the reference as let owner: Owner

      Solution

      1. Step 1: Understand strong vs weak references

        Strong references increase ARC count and can cause cycles; weak references do not increase ARC count.
      2. Step 2: Choose weak reference to break cycle

        Declaring owner as weak var owner: Owner? allows ARC to free objects properly by not increasing reference count.
      3. Final Answer:

        Declare the reference as weak var owner: Owner? -> Option A
      4. Quick Check:

        Use weak to avoid strong reference cycles [OK]
      Hint: Use weak references to break cycles safely [OK]
      Common Mistakes:
      • Using unowned incorrectly causing crashes
      • Using strong references causing memory leaks
      • Forgetting to make weak references optional
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard