Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save tornikegomareli/230f9edb43f9c108c21f50db51ccbbe5 to your computer and use it in GitHub Desktop.
Save tornikegomareli/230f9edb43f9c108c21f50db51ccbbe5 to your computer and use it in GitHub Desktop.
//
// 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