Middle
Hoe kunnen objecten van klassen in een array worden opgeslagen via een sterke verwijzing?
sobes.tech AI
Antwoord van AI
Objecten van een klasse in een array worden standaard in Swift opgeslagen via sterke referenties, als de array elementen van het klasse-type bevat. Een array [MyClass] of Array<MyClass> bevat sterke referenties naar de instanties van MyClass.
Voorbeeld:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) gemaakt")
}
deinit {
print("MyClass \(id) gedealloceerd")
}
}
var sterkeReferentieArray: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
sterkeReferentieArray.append(obj) // Array houdt sterke referenties
}
print("Array heeft \(sterkeReferentieArray.count) elementen")
// Objecten worden niet gedealloceerd zolang er sterke referenties in de array bestaan
// Toewijzing van `nil` aan de array of verwijderen van elementen zal leiden tot deallocatie,
// als er geen andere sterke referenties zijn.
// sterkeReferentieArray = [] // Voorbeeld van het vrijmaken van alle sterke referenties
// sterkeReferentieArray.remove(at: 0) // Voorbeeld van het vrijmaken van één sterke referentie
In Swift slaan arrays van waarde-typen (struct) of enumeraties (enum) kopieën van hun elementen op. Echter, als de array instanties van klassen (class) bevat, slaat hij sterke referenties op naar die instanties.