Igo*_*iuc 2 objective-c ios objective-c-blocks
如何在块中更改int值,我有这个:
__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);
Run Code Online (Sandbox Code Playgroud)
问题是,在assetForURL:...方法完成其工作之后,您正在发送该块以便稍后执行,这是异步执行的.它最有可能在后台线程或队列上,允许方法本身在工作继续时立即返回.
因此,该方法在您运行之前assetForURL:...返回,这意味着当您到达第二个时,该值尚未更改.一切都很好; 你只是过早地检查价值.resultBlockNSLog