Comment changer la valeur int en bloc?

Comment changer la valeur int en bloc, j'ai ceci:

__block long long size = -1; ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) { ALAssetRepresentation * rep = [myasset defaultRepresentation]; size = [rep size]; //here showed normal value NSLog(@"needed size : %lld",size); }; ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease]; [assetslibrary assetForURL:self.tmpVideoURL resultBlock:resultblock failureBlock:nil]; //but here remaind -1 NSLog(@"out block value : %lld",size); 

Le problème est que vous envoyez ce bloc pour qu'il soit exécuté plus tard, après que la méthode assetForURL:... a effectué son travail, ce qu'elle fait de manière asynchronous . Il s'agit très probablement d'un fil d'arrière-plan ou d'une queue, permettant à la méthode de returnner immédiatement pendant que le travail se poursuit.

Donc la méthode assetForURL:... returnne avant que votre resultBlock soit exécuté, ce qui signifie que la valeur n'a pas encore été changée, au moment où vous arrivez au second NSLog . Tout fonctionne bien; vous vérifiez juste la valeur trop tôt.