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