Automatic Reference Counting (ARC)

Run Settings
LanguageSwift
Language Version
Run Command
class Person { let name: String init(name: String) { self.name = name print("\(name) is being initialized") } deinit { print("\(name) is being deinitialized") } } var reference1: Person? var reference2: Person? var reference3: Person? reference1 = Person(name: "Dicoding indonesia") // Prints "Dicoding Indonesia is being initialized" reference2 = reference1 reference3 = reference1 reference1 = nil reference2 = nil reference3 = nil // Prints "Dicoding indonesia is being deinitialized" class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? deinit { print("\(name) is being deinitialized") } } class Apartment { let unit: String init(unit: String) { self.unit = unit } var tenant: Person? deinit { print("Apartment \(unit) is being deinitialized") } } var memberDicoding: Person? var dicodingSpace: Apartment? memberDicoding = Person(name: "Gilang Ramadhan") dicodingSpace = Apartment(unit: "Dicoding Academy") memberDicoding!.apartment = dicodingSpace dicodingSpace!.tenant = memberDicoding memberDicoding = nil dicodingSpace = nil class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? deinit { print("\(name) is being deinitialized") } } class Apartment { let unit: String init(unit: String) { self.unit = unit } weak var tenant: Person? deinit { print("Apartment \(unit) is being deinitialized") } } var memberDicoding: Person? var dicodingSpace: Apartment? memberDicoding = Person(name: "Gilang Ramadhan") dicodingSpace = Apartment(unit: "Dicoding Academy") memberDicoding!.apartment = dicodingSpace dicodingSpace!.tenant = memberDicoding memberDicoding = nil // Prints "Gilang Ramadhan is being deinitialized" dicodingSpace = nil // Prints "Apartment Dicoding Academy is being deinitialized" class Person { let name: String var number: PhoneNumber? init(name: String) { self.name = name } deinit { print("\(name) is being deinitialized") } } class PhoneNumber { let number: UInt64 unowned let owner: Person init(number: UInt64, owner: Person) { self.number = number self.owner = owner } deinit { print("Phone number +\(number) is being deinitialized") } } var memberDicoding: Person? memberDicoding = Person(name: "Gilang Ramadhan") memberDicoding!.number = PhoneNumber(number: 62810_8108_1081, owner: memberDicoding!) memberDicoding = nil // Prints "Gilang Ramadhan is being deinitialized" // Prints "Phone number +6281081081081 is being deinitialized"
Editor Settings
Theme
Key bindings
Full width
Lines