2016-04-18 12 views
1

UserManagerViewController eine Klasse, die Benutzerobjekte (erstellt/Release) für den Rest meines View-Controller (so dass ich mehrere Benutzerobjekte nicht schaffen) verwaltet, die ich habe:Wie kann ich den Speicher in Swift korrekt freigeben?

var resources = Dictionary<Int, T>() 

Immer, wenn ich eine Ressource benötigen , ich tue dies:

let id = data["id"].intValue 
self.resources[id] = User(data: data) //Create a User object and set it to the dictionary 

ich habe andere Viewcontrollers, dass „hängen“ auf dieses Objekt, wenn es will, es benutzen:

var users = [User]() 
users.insert(<The pointer to resources[id]>, atIndex: 99) 

//later on... 
users.removeAtIndex(99) //this should release its hold 

Später, als ich das letzte erstellte Objekt freigeben müssen, ich dies tun:

resources.removeValueForKey(id) 

Wird diese Methode richtig sicherzustellen, dass die User Instanz einfach weggeht, da beide ihre Eltern sie veröffentlicht?

+0

Ist 'Benutzer' eine Klasse oder eine Struktur? – tktsubota

+0

Benutzer ist eine Klasse. – TIMEX

Antwort

4

Ja, die Benutzerinstanz verschwindet. Swift verwendet automatic reference counting, um Speicher zu verwalten. Wenn Sie in einem Fall einen Benutzer in ein Ressourcendiktat einfügen, enthält das Dict einen Verweis auf diesen Benutzer. Wenn Sie später einen Benutzer in die Benutzerliste aufnehmen, enthält er auch einen Verweis auf den Benutzer. Wenn Sie einen Benutzer aus dieser Datenstruktur entfernen, haben Sie keinen Verweis auf die Instanz, was bedeutet, dass die Benutzerinstanz entfernt wird.

Verwandte Themen