Created
May 29, 2023 08:02
-
-
Save tornikegomareli/230f9edb43f9c108c21f50db51ccbbe5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// main.swift | |
// MemoryLeaks25May2023 | |
// | |
// Created by Tornike on 25/05/2023. | |
// | |
import Foundation | |
// Retain cycle | |
// Cycle reference buffer | |
class Person { | |
var name: String | |
weak var car: Car? | |
init(name: String) { | |
self.name = name | |
print("Person object has been initialized") | |
} | |
deinit { | |
print("Person object has been deallocated") | |
} | |
} | |
class Car { | |
var model: String | |
var owner: Person? | |
init(model: String) { | |
self.model = model | |
print("Car object has been initialized") | |
} | |
deinit { | |
print("Car object has been deallocated") | |
} | |
} | |
var tornike: Person? | |
var ferrari: Car? | |
// Person ობიექტი - 0XBC | |
// Car ობიექტი - 0XBG | |
tornike = Person(name: "Tornike") // -> OXBC -> Reference counter = 1 | |
ferrari = Car(model: "Ferrari") // -> OXBG -> Reference counter = 1 | |
tornike?.car = ferrari // -> OXBG -> Car ის reference counter = 1, იმიტომ რომ car ი weak | |
ferrari?.owner = tornike // -> OXBC -> Person ის რეფერენცე ქაუნთერი = 2, იმიტომ რომ owner ი weak ი არ არის | |
tornike = nil // ferrari.owner -> OXBC -> Person ის ქაუნთერი ჩამოვიდა უკვე 1 ზე | |
ferrari = nil // აღარავინ უყურებს უკვე 0XBG -> Car ის ქაუნთერი ჩამოვიდა უკვე 0 ზე და Person ჩამოვიდა ისევ ერთით 0 ზე | |
// Car is obieqts aqvs 0 reference counter | |
// Person is obieqts aqvs 0 reference counter |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment