Fuente
Затишна Галера | iOSКомпас 🧭1️⃣3️⃣4️⃣ Завдання 134Чим небезпечна утечка пам’яті?Доброго...
789 Vistas/Alcance
2025-12-24 12:45
Mensaje №2303
#iOSКомпас 🧭1️⃣3️⃣4️⃣ Завдання 134Чим небезпечна утечка пам’яті?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel. 🤔 Утечка пам’яті (memory leak) - це ситуація, коли пам’ять залишається виділеною, але програма вже не може отримати до неї доступ і не звільняє її. Такі утечки поступово збільшують споживання пам’яті, що може призвести до деградації продуктивності або краху застосунку.class Person { var pet: Pet? deinit { print("Person видалений") }}class Pet { var owner: Person? deinit { print("Pet видалений") }}var person: Person? = Person()var pet: Pet? = Pet()person?.pet = petpet?.owner = personperson = nilpet = nil
🔣 Як уникнути утечок пам’яті?🔣 Використовувати weak або unowned посиланняweak та unowned не утримують об’єкт, тому не створюють циклу посилань.class Person { var pet: Pet? deinit { print("Person видалений") }}class Pet { weak var owner: Person? deinit { print("Pet видалений") }}
🔣 unowned використовують тоді, коли об’єкт гарантовано існуватиме протягом усього часу життя того, хто на нього посилається.class Owner { var car: Car? deinit { print("Owner видалений") }}class Car { unowned var owner: Owner init(owner: Owner) { self.owner = owner } deinit { print("Car видалений") }}
🔣 Розривати цикли в замиканнях ([weak self])Замикання можуть утримувати self, якщо їх зберігає сам клас.class ViewController { var closure: (() -> Void)? func setup() { closure = { [weak self] in print(self as Any) } } deinit { print("ViewController видалений") }}
🔣 Як знайти утечки пам’яті?➖ Використовувати Instruments Leaks➖ Перевіряти виклик deinit➖ Досліджувати Memory Graph у Xcode з Malloc Stack Logging#️⃣ Такий підхід дозволяє виявляти цикли посилань і контролювати життєвий цикл об’єктів у Swift.@Zatishna_Galera