The Leak è una perdita di root , in questa immagine viene provocata più volte sulla stessa linea, ma c'è un altro sotto che viene chiamato singola ora e produce anche una perdita.Perché c'è una perdita di memoria durante la creazione di stringhe in swift?
Questo è lo stack di chiamate dopo chiamare la riga di codice detto prima.
Questa è la classe dove la perdita si trova da Instruments:
class Item {
var id: String!
var name: String!
internal init(name: String) {
self.name = name
self.id = name
}
var description: String {
return "(\(id)) \(name)"
}
}
perdita viene rilevato alla riga di calcolata variabile descrizione contenente return "(\(id)) \(name)"
e diventa risolto dopo la modifica descrizione in:
var description: String {
return "(" + id + ") " + name
}
.210
Aggiornamento:
o
var description: String {
if let id = self.id as? String, let name = self.name as? String {
return "(\(id)) \(name)"
}
return "NO AVAILABLE DESCRIPTION"
}
L'ultimo emette un "getto condizionale da 'String!' a String ha sempre successo ".
Quindi, anche questo sembra un trucco.
Perché questo causa una perdita?
È probabile che qualcosa fuori da questa classe causi la perdita. Controlla la classe che crea questo oggetto Item. Sta referenziando id o nome? Inoltre, la perdita è un "ciclo" Ciò indica anche che qualcosa al di fuori di questa classe contiene un riferimento – Stephen
@Stephen Ho aggiornato la domanda, aggiungendo alcune informazioni sulla perdita –
Entrambe le forme della concatenazione di stringhe devono essere valido Sembra che questo potrebbe essere un bug di Apple. Potresti provare a presentare una segnalazione di bug con Apple. – Stephen