2014-06-10 12 views
75

In Swift, noto che non esiste il costrutto @autoreleasepool{}, sebbene Swift usi ARC. Qual è il modo corretto di gestire un autoreleasepool in Swift o è stato rimosso per qualche motivo?Qual è l'equivalente di @autoreleasepool in Swift?

+0

forse non è ancora stato rilasciato (e implementato uno personalizzato con il bridge ObjC è facile) –

+0

Anche correlato e interessato: "È necessario utilizzare autoreleasepool in un programma Swift?" http://stackoverflow.com/questions/25860942/is-it-necessi-to-use-autoreleasepool-in-a-swift-program?rq=1 –

risposta

116

Questo è spiegato in dettaglio in WWDC 2014 session video numero 418 "Migliorare la vostra applicazione con strumenti", che è anche possibile scaricare in formato PDF.

Ma insomma, la sintassi è:

autoreleasepool { 
    /* code */ 
} 
+7

È importante notare che '{' ** deve ** essere sulla stessa linea di "autoreleasepool", altrimenti devi racchiuderlo in '()'. Questo * davvero * mi infastidisce ad essere sincero ... – Erik

+1

@SiLo davvero? Questo fa schifo. Dovresti presentare un bug report. –

+19

@AbhiBeckert @SiLo Non è un bug. 'autorelease' è una funzione che accetta una chiusura come argomento. Questo è un esempio della sintassi short-hand closure-as-last-argument. –

7

C'è! Non è solo menzionato davvero da nessuna parte.

autoreleasepool { 
    Do things.... 
} 
15

Cordiali saluti, Xcode costruito il codice completo come segue:

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

Indovina le parentesi identifica la chiusura funzioni.

+3

non sono sicuro del motivo per cui qualcuno ha de-votato questo commento, poiché sta facendo notare che un pool di autorelease fino a swift1.2 richiede che il codice venga inserito in una chiusura – bolnad