Bird
Raised Fist0
Swiftprogramming~5 mins

Unowned references for guaranteed lifetime in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is an unowned reference in Swift?
An unowned reference is a non-owning pointer to an instance that is expected to always have a valid value during its lifetime. It does not increase the reference count and assumes the referenced object will not be deallocated while the unowned reference exists.
Click to reveal answer
intermediate
How does an unowned reference differ from a weak reference?
An unowned reference assumes the referenced object will never be nil during its lifetime, so it is non-optional and does not become nil automatically. A weak reference is optional and automatically becomes nil when the referenced object is deallocated.
Click to reveal answer
beginner
When should you use unowned references?
Use unowned references when you know the referenced object will always outlive the reference, such as in parent-child relationships where the child references the parent but the parent owns the child.
Click to reveal answer
intermediate
What happens if you access an unowned reference after the referenced object is deallocated?
Accessing an unowned reference after the referenced object is deallocated causes a runtime crash because the reference points to invalid memory.
Click to reveal answer
beginner
Example: How do you declare an unowned reference in Swift?
You declare an unowned reference using the keyword <code>unowned</code> before the variable, for example: <br><pre>class Child {
  unowned let parent: Parent
  init(parent: Parent) {
    self.parent = parent
  }
}</pre>
Click to reveal answer
What keyword declares an unowned reference in Swift?
Aunowned
Bweak
Cstrong
Doptional
Which statement about unowned references is true?
AThey do not increase the reference count and are non-optional.
BThey are always optional types.
CThey become nil automatically when the referenced object is deallocated.
DThey increase the reference count to keep the object alive.
When is it safe to use an unowned reference?
AWhen the referenced object might be deallocated anytime.
BWhen the referenced object is guaranteed to outlive the reference.
CWhen you want the reference to become nil automatically.
DWhen you want to create a strong ownership cycle.
What happens if you access an unowned reference after its object is deallocated?
ANothing happens; it continues normally.
BThe reference becomes nil safely.
CSwift automatically recreates the object.
DThe program crashes at runtime.
Which of these is a typical use case for unowned references?
AA parent object referencing its child.
BTwo unrelated objects referencing each other strongly.
CA child object referencing its parent.
DA global variable referencing a local variable.
Explain what an unowned reference is and when you should use it in Swift.
Think about parent-child relationships and memory safety.
You got /5 concepts.
    Describe the difference between unowned and weak references and why that difference matters.
    Consider what happens if the referenced object is deallocated.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using unowned references in Swift?
      easy
      A. To automatically nil out the reference when the object is deallocated
      B. To create a strong reference that keeps the object alive
      C. To make a copy of the referenced object
      D. To refer to another object without increasing its lifetime

      Solution

      1. Step 1: Understand what unowned means

        unowned references do not increase the lifetime of the object they point to.
      2. Step 2: Compare with other reference types

        Unlike strong references, unowned does not keep the object alive, and unlike weak references, it assumes the object will always exist during use.
      3. Final Answer:

        To refer to another object without increasing its lifetime -> Option D
      4. Quick Check:

        Unowned references = no lifetime increase [OK]
      Hint: Unowned means no lifetime increase, but object must exist [OK]
      Common Mistakes:
      • Confusing unowned with strong references
      • Thinking unowned automatically nils out
      • Assuming unowned copies the object
      2. Which of the following is the correct syntax to declare an unowned reference to an instance of class Person named friend?
      easy
      A. unowned var friend: Person
      B. var friend: unowned Person
      C. var friend: Person unowned
      D. var unowned friend: Person

      Solution

      1. Step 1: Recall Swift syntax for unowned references

        The correct syntax places unowned before the variable declaration: unowned var variableName: Type.
      2. Step 2: Match the options

        unowned var friend: Person matches this syntax exactly: unowned var friend: Person.
      3. Final Answer:

        unowned var friend: Person -> Option A
      4. Quick Check:

        Unowned keyword before var = correct syntax [OK]
      Hint: Put 'unowned' before 'var' for correct syntax [OK]
      Common Mistakes:
      • Placing 'unowned' after the variable name
      • Using 'var' after 'unowned' incorrectly
      • Writing 'unowned' after the type
      3. Consider the following Swift code snippet:
      class Owner {
          var pet: Pet?
      }
      
      class Pet {
          unowned var owner: Owner
          init(owner: Owner) {
              self.owner = owner
          }
      }
      
      let owner = Owner()
      owner.pet = Pet(owner: owner)
      print(owner.pet?.owner === owner)

      What will be the output?
      medium
      A. true
      B. false
      C. nil
      D. Runtime error

      Solution

      1. Step 1: Understand the relationship between Owner and Pet

        Owner has an optional Pet, and Pet has an unowned reference back to Owner, meaning Pet expects Owner to exist while Pet exists.
      2. Step 2: Analyze the print statement

        The print checks if the owner property of pet is the same instance as owner using identity operator ===. Since pet.owner was set to owner, this is true.
      3. Final Answer:

        true -> Option A
      4. Quick Check:

        Unowned reference points to existing object = true [OK]
      Hint: Unowned references assume object exists, so identity check is true [OK]
      Common Mistakes:
      • Thinking unowned makes owner nil
      • Confusing identity operator with equality
      • Expecting runtime error due to unowned
      4. Given the code below, what is the main issue causing a runtime crash?
      class A {
          unowned var b: B
          init(b: B) {
              self.b = b
          }
      }
      
      class B {
          var a: A?
      }
      
      var bInstance: B? = B()
      var aInstance: A? = A(b: bInstance!)
      bInstance?.a = aInstance
      
      bInstance = nil
      print(aInstance!.b)
      aInstance = nil
      medium
      A. Optional unwrapping failure
      B. Unowned reference b is accessed after B is deallocated
      C. Syntax error in unowned declaration
      D. Strong reference cycle causing memory leak

      Solution

      1. Step 1: Understand the unowned reference lifetime

        The unowned reference b in class A assumes B instance exists as long as A exists.
      2. Step 2: Analyze object deallocation order

        When bInstance is set to nil, B is deallocated, but A remains alive (held by aInstance). Thus b in A points to deallocated B, and print(aInstance!.b) accesses it, causing crash.
      3. Final Answer:

        Unowned reference b is accessed after B is deallocated -> Option B
      4. Quick Check:

        Unowned must not outlive referenced object [OK]
      Hint: Unowned crashes if referenced object is gone first [OK]
      Common Mistakes:
      • Confusing unowned with weak references
      • Ignoring object deallocation order
      • Assuming unowned prevents crashes automatically
      5. You have two classes, Teacher and Student, where each Student has an unowned reference to their Teacher, and each Teacher has a strong array of Student instances. Which of the following best explains why using unowned for the Student to Teacher reference is appropriate?
      hard
      A. Because unowned references automatically nil out when the Teacher is deallocated
      B. Because the Student might outlive the Teacher, so unowned avoids nil references
      C. Because the Teacher always exists as long as the Student exists, preventing strong reference cycles
      D. Because unowned references increase the lifetime of the Teacher to match the Student

      Solution

      1. Step 1: Understand the lifetime relationship

        The Teacher owns the Student strongly, so the Teacher will exist as long as the Student does.
      2. Step 2: Why use unowned here?

        Using unowned for the Student to Teacher reference avoids a strong reference cycle because Student does not keep Teacher alive.
      3. Final Answer:

        Because the Teacher always exists as long as the Student exists, preventing strong reference cycles -> Option C
      4. Quick Check:

        Unowned = guaranteed lifetime, no cycle [OK]
      Hint: Use unowned when referenced object lifetime is guaranteed [OK]
      Common Mistakes:
      • Thinking unowned nils out automatically
      • Assuming unowned increases lifetime
      • Using unowned when referenced object may be nil
      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