Dos consells que he rebut dels enginyers d’Apple per evitar pèrdues de memòria i augmentar l’eficiència

Bloc

Dos consells que he rebut dels enginyers d’Apple per evitar pèrdues de memòria i augmentar l’eficiència

Swift utilitza el recompte automàtic de referències (ARC) per gestionar la seva assignació i desassignació de memòria. Això vol dir que Swift assigna automàticament memòria a objectes i, després, allibera aquesta memòria quan l’objecte ja no s’utilitza (això es fa seguint el nombre de referències de cada objecte; zero referències condueixen a una repartició).

Tot i que ARC gestiona la major part de la gestió de la memòria, un cicle de referència fort pot provocar fuites de memòria de la vostra aplicació.

Un cas d'ús comú per a aquest tipus de cicle de retenció és quan es captura un mateix dins d'un tancament d'una classe.

També es pot produir un cicle de referència fort si assigneu un tancament a una propietat d'una instància de classe i el cos d'aquest tancament captura la instància. - Swift.org

A la Aplicació de mentorat per a iOS , vam tenir aquests cicles de retenció mentre realitzàvem les trucades de xarxa i assignàvem propietats a l'operador de la pica.

import Foundation import Combine class Members: ObservableObject { @Published var membersResponseData = [MembersModel.MembersResponseData]() private var cancellable: AnyCancellable? func fetchMembers() { cancellable = NetworkManager.callAPI(urlString: URLStringConstants.members) .receive(on: RunLoop.main) .catch { _ in Just(self.membersResponseData) } .sink { members in // RETAIN CYCLE : strong capturing of self in a closure in a class self.membersResponseData = members } } }

Un tancament, com una classe, és un tipus de referència. Per tant, capturant-nos dins d’un tancament d’una classe fem un cicle de retenció; ja que el tancament és capturat per la classe i la classe és capturada pel tancament. Com a resultat, en el codi anterior, els membres de la classe mai no es desinicialitzaran (fuita de memòria!).

Solució:

El cicle de referència forta es pot resoldre fàcilment capturant un individu feble al tancament.

hi ha day hacker tool
.sink { [weak self] members in self?.membersResponseData = members }

#swiftui #programming #ios # memory-leak # swift-programming

medium.com

Dos consells que he rebut dels enginyers d’Apple per evitar pèrdues de memòria i augmentar l’eficiència

Dos consells que he rebut dels enginyers d’Apple per evitar fuites de memòria i augmentar l’eficiència a SwiftUI.