On Aug 15, 2013, at 9:49 AM, Jens Alfke wrote:

> On Aug 15, 2013, at 5:41 AM, Vlad Alekseev <ippo...@me.com> wrote:
> 
>> dispatch_block_t block = ^{
>>   printf("finished");
>> };
>> 
>> UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout 
>> *)self.collectionView.collectionViewLayout;
>> [self.collectionView performBatchUpdates:^{
>>   layout.minimumInteritemSpacing = 20;
>> } completion:^(BOOL finished) {
>>   block();
>> }];
> 
> As I said before, this is a bug in your code. ‘block’ needs to be copied 
> since it is going to be called after the calling function returns.
> 
> Yes, the collection view copies the completion block you pass it. But that 
> block is not ‘block’, it’s the inline block literal that calls ‘block’. That 
> gets copied, but when that is called it still tries to call the uncopied 
> ‘block’, which fails.

When a block gets copied, it copies any blocks it has captured.  So, the fact 
that the completion block is copied by the framework code is sufficient.
https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW7

Regards,
Ken


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to