2011-01-12 16 views

Respuesta

10

Sí, necesita copiar. No porque se publiquen de forma automática, sino porque comienzan en la pila. Tenga en cuenta que los bloques también se comportan como objetos normales de Objective-C, por lo que se puede copiar utilizando la copy mensaje normal:

void storeBlockForLater: (dispatch_block_t) block 
{ 
    [someArray addObject:[[block copy] autorelease]]; 
} 

O, si usted tiene una propiedad de bloque:

@property(copy) dispatch_block_t block; 

de retención no lo hace ayuda aquí

+2

Gracias, también encontré este excelente artículo sobre el tema: http://cocoawithlove.com/2009 /10/how-blocks-are-implemented-and.html – brian

+1

Sí; y si usa 'copy', use' release'. Si usa 'Block_copy()', use 'Block_release()'. No los mezcles. – bbum

+0

@bbum ¿Es seguro usar 'Block_copy()' y 'autorelease'? ¿Debería usar 'autorelease' con' copy'? –

Cuestiones relacionadas