Se io dichiaro un blocco come questo ^{ DoSomething; }
e metterlo in una variabile di istanza, ho bisogno per Block_copy()
se ho intenzione di tenerlo in giro?I blocchi Objective-C vengono rilasciati automaticamente?
risposta
Sì, è necessario copiare. Non perché siano autorelati, ma perché iniziano in pila. Si noti che i blocchi si comportano anche come normali oggetti Objective-C, in modo che è possibile copiare utilizzando il normale copy
messaggio:
void storeBlockForLater: (dispatch_block_t) block
{
[someArray addObject:[[block copy] autorelease]];
}
Oppure, se si dispone di una proprietà di blocco:
@property(copy) dispatch_block_t block;
fissaggio non lo fa aiuto qui.
Grazie, ho trovato anche questo fantastico articolo sull'argomento: http://cocoawithlove.com/2009 /10/how-blocks-are-implemented-and.html – brian
Yup; e se usi 'copia', usa' release'. Se usi 'Block_copy()', usa 'Block_release()'. Non mescolarli. – bbum
@bbum È sicuro usare 'Block_copy()' e 'autorelease'? Dovresti usare solo 'autorelease' con 'copy'? –
- 1. I frammenti non vengono rilasciati dalla memoria
- 2. I campi contrassegnati C# ThreadStaticAttribute vengono rilasciati automaticamente quando il thread muore?
- 3. quando/quali blocchi vengono mantenuti/rilasciati nel livello di isolamento READ COMMITTED
- 4. I vettori vengono ridimensionati automaticamente?
- 5. Come vengono implementati i blocchi try/catch?
- 6. Sotto ARC, i blocchi vengono copiati automaticamente quando assegnati a un ivar tramite la proprietà?
- 7. Sotto ARC, i blocchi vengono copiati automaticamente quando assegnati ad un ivar direttamente?
- 8. ObjectiveC blocca l'equivalente Java
- 9. Gli oggetti IOS Core Animation non vengono rilasciati
- 10. Blocchi statici - quando vengono eseguiti
- 11. Perché i blocchi vengono eseguiti su oggetti separati?
- 12. I video PDC 2009 sono stati rilasciati?
- 13. Perché i miei indici vengono rilasciati quando cambio uno schema di visualizzazione di Index?
- 14. Oracle 11g - I segmenti dello spazio tabelle temporaneo non vengono rilasciati (bug Oracle?)
- 15. Analizza e Xcode: i blocchi non si completano automaticamente.
- 16. I file creati con Path.GetTempFileName vengono puliti automaticamente?
- 17. I file gitignore vengono creati automaticamente nel mio progetto?
- 18. SmtpClient.SendAsync Le chiamate vengono annullate automaticamente
- 19. Implementare protocollo ObjectiveC in rapida
- 20. .NET PrivateFontCollection - come liberare i blocchi di file quando finito
- 21. Qualsiasi software per generare automaticamente blocchi di commenti doxygen?
- 22. Come dividere newline da NSString in ObjectiveC
- 23. Come vengono risolte le dipendenze tra i blocchi statici tra oggetti?
- 24. Cosa sono i blocchi di riga, pagina e tabella? E quando vengono acquisiti?
- 25. In quale ordine vengono eseguiti i blocchi di inizializzazione statici/di istanza in Java?
- 26. I blocchi estratti in HyperLedger?
- 27. - [NSinvocation retainArguments] copia i blocchi?
- 28. È possibile taggare i blocchi?
- 29. Perché qui vengono utilizzati i lucchetti?
- 30. Ricarica automaticamente i file modello
Nota .. per ARC, un codice di esempio è disponibile qui: http://stackoverflow.com/a/20760583/294884 – Fattie