Mobile Development
Swift
Subjective
Oct 04, 2025
How does Swift's ownership system work?
Detailed Explanation
Swift's ownership system manages memory automatically while preventing common memory errors.\n\n• **Reference Counting:**\n\nclass Resource {
\n let name: String\n init(name: String) {\n self.name = name\n print("\(name) created")\n }\n deinit {\n print("\(name) destroyed")\n }\n}\n\nvar resource1: Resource? = Resource(name: "Resource1") // RC = 1\nvar resource2 = resource1 // RC = 2\nresource1 = nil // RC = 1\nresource2 = nil // RC = 0, deinit called\n\n\n• **Weak References:**\n\nclass Parent {
\n var children: [Child] = []\n deinit { print("Parent deallocated") }\n}\n\nclass Child {
\n var parent: Parent? // Prevents retain cycle\n init(parent: Parent) {\n self.parent = parent\n parent.children.append(self)\n }\n deinit { print("Child deallocated") }\n}\n\n\n• **Unowned References:**\n\nclass Customer {
\n let name: String\n var card: CreditCard?\n init(name: String) { self.name = name }\n deinit { print("\(name) is being deinitialized") }\n}\n\nclass CreditCard {
\n let number: UInt64\n let customer: Customer // Always has a customer\n init(number: UInt64, customer: Customer) {\n self.number = number\n self.customer = customer\n }\n deinit { print("Card #\(number) is being deinitialized") }\n}\n\n\n• **Closure Capture Lists:**\n\nclass HTMLElement {
\n let name: String\n let text: String?\n \n var asHTML: () -> String = { [unowned self] in\n let text = self.text {\n return "<\(self.name)>\(text)\(self.name)>"\n } else {\n return "<\(self.name) />"\n }\n }\n \n init(name: String, text: String? = nil) {\n self.name = name\n self.text = text\n }\n \n deinit {\n print("\(name) is being deinitialized")\n }\n}\n\n\n• **Value Type Ownership:**\n\n// Value types have automatic ownership\nstruct Data {
\n var content: [Int]\n}\n\nvar data1 = Data(content: [1, 2, 3])\nvar data2 = data1 // Copy created\ndata2.content.append(4) // Only affects data2\n
Discussion (0)
No comments yet. Be the first to share your thoughts!
Share Your Thoughts