2016-08-11 2 views
1

Soweit ich weiß, wenn eine Struktur mehr als eine Referenz als Eigenschaft gespeichert enthält, ist es (2 * Verweis) teurer, es zuzuweisen als eine Klasse. Ist es in lokalen Variablen der gleiche Fall?Struktur mit lokalen Referenzen vs Klasse mit lokalen Referenzen? Schnelle Leistung

struct ViewNavigationRouter { 

    private let firstViewController : UIViewController 

    init(firstViewController: UIViewController) { 
     self.firstViewController = firstViewController 
    } 

    func navigate(from: UIViewController) { 

     let viewController1 : UIViewController = xxx 
     let viewController2 : UIViewController = xxx 
     let viewController3 : UIViewController = xxx 
    } 
} 



class ViewNavigationRouter { 

    private let firstViewController : UIViewController 

    init(firstViewController: UIViewController) { 
     self.firstViewController = firstViewController 
    } 

    func navigate(from: UIViewController) { 

     let viewController1 : UIViewController = xxx 
     let viewController2 : UIViewController = xxx 
     let viewController3 : UIViewController = xxx 
    } 
} 

Vielen Dank im Voraus :)

+1

Was meinen Sie mit "teurer zu reservieren"? Memory-weise? Hast du einen Link dazu, wo du davon erfahren hast? – Thilo

+1

Ja, Sie können dieses Video darüber ansehen: https://developer.apple.com/videos/play/wwdc2016/416/ Wenn die Struktur Referenzen hat, wird jede von ihnen im Heap zugeordnet und es fügt 2 zusätzliche Wörter hinzu (Typ und Referenz zählen), auch die Struktur ist im Stapel zugeordnet – Saidre

+1

Es scheint, dass der Abschnitt, auf den sich die Frage bezieht, etwa 15 Minuten in, wo sie darauf hinweisen, dass alle diese Referenzen haben, um eine Struktur mit N Referenzen innerhalb zu kopieren um ihre Retain-Anzahl zu erhöhen (wenn Sie jedoch einen weiteren Verweis auf eine Klasse mit N Referenzen hinzufügen, muss dies nicht passieren). – Thilo

Antwort

0

Es scheint, ist es das gleiche in diesem Fall, wie alle Mitglieder in struct ViewNavigationRouter und in der Klasse ViewNavigationRouter sind - Instanzen von Klassen (firstViewController: UIViewController). Ich sehe keinen größeren Zusammenhang, aber so sieht es hier aus.

Ich schlage vor, Sie dieses https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html oft zu lesen, speziell auf Teile Strukturen und Aufzählungen Fokussierung sind Typen Wert und Klassen sind Referenztypen.

Der wichtigste Unterschied hängt damit zusammen, was passiert, wenn Sie die Inhaltskennung kopieren, zeigt "auf". Ich schlage vor, Sie lesen Sie weiter:

https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.htm und werfen Sie einen Blick auf Beispiele. Dann werden Sie feststellen, dass es bei diesem Unterschied nicht um die Speicherleistung geht, sondern darum, wie ARC Speicher löscht.

Verwandte Themen