2011-01-12 15 views

cevap

10

Evet, kopyalamanız gerekiyor. Onlar otomatik olarak çalıştırıldıkları için değil, yığın üzerinde başladıkları için değil. Eğer bir blok özelliği varsa

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

Veya: Düzenli copy mesajı kullanarak bunları kopyalayabilirsiniz böylece bloklar da, düzenli Objective-C nesneleri gibi davranmaya dikkat edin

@property(copy) dispatch_block_t block; 

İstinat değil burada yardım et.

+2

Ayrıca, bu harika makaleyi de buldum: http://cocoawithlove.com/2009 /10/how-blocks-are-implemented-and.html – brian

+1

Yup; ve 'copy' kullanırsanız, 'release' kullanın. Eğer 'Block_copy() 'kullanıyorsanız,' Block_release() 'kullanın. Onları karıştırmayın. – bbum

+0

@bbum 'Block_copy()' ve 'autorelease' kullanmak güvenli midir? Eğer 'autorelease'' 'copy' ile kullanmanız gerekiyor? –