2014-06-10 18 views
75

In Swift bemerke ich, dass es kein @autoreleasepool{} Konstrukt gibt, obwohl Swift ARC verwendet. Was ist der richtige Weg, um einen Autoreleasepool in Swift zu verwalten, oder wurde er aus irgendeinem Grund entfernt?Was entspricht @autoreleasepool in Swift?

+0

vielleicht ist es nur noch nicht für uns freigegeben (und implementiert eine benutzerdefinierte mit ObjC Brücke ist einfach) –

+0

Auch verwandt und interessiert: "Ist es notwendig, Autorespeicherung in einem Swift-Programm zu verwenden?" http://stackoverflow.com/questions/25860942/is-it-necessary-to-use-autoreasepool-in-a-swift-program?rq=1 –

Antwort

116

Diese im Detail in WWDC 2014 session video Zahl erklärt 418 "Verbesserung Ihrer App mit Instrumenten", die Sie auch als PDF herunterladen.

Aber kurz gesagt, die Syntax ist:

autoreleasepool { 
    /* code */ 
} 
+7

Es ist wichtig zu beachten, dass die '{** ** muss ** in der gleichen Zeile sein wie der 'autoresposepool', sonst müssen Sie es in'() 'einbinden. Das * ärgert mich wirklich, um ehrlich zu sein ... – Erik

+1

@SiLo wirklich? Das ist Scheiße. Sie sollten einen Fehlerbericht einreichen. –

+19

@AbhiBeckert @SiLo Es ist kein Fehler. 'Autorelease' ist eine Funktion, die eine Schlussfolgerung als Argument akzeptiert. Dies ist ein Beispiel für die Short-Hand-Closure-as-Last-Argument-Syntax. –

7

Es gibt! Es wird nirgendwo wirklich erwähnt.

autoreleasepool { 
    Do things.... 
} 
15

Gerade FYI, Xcode den vollständigen Code wie folgt aufgebaut:

autoreleasepool({() ->() in 
    // code    
}) 

Erraten Sie die Klammern, um die Funktionen Schließung identifiziert.

+3

Ich bin mir nicht sicher, warum jemand diesen Kommentar abgelehnt hat, da er darauf hinweist, dass ein Autorelease-Pool, soweit Swift1.2 benötigt wird, den Code benötigt, der in eine Schließung eingeschlossen wird – bolnad