如何在块中更改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);
答案 0 :(得分:7)
问题是,在assetForURL:...
方法完成其工作后,您将在以后的某个时间发送该块以执行异步 。它最有可能在后台线程或队列中,允许方法本身在工作继续时立即返回。
因此方法assetForURL:...
会在运行resultBlock
之前返回,这意味着当您到达第二个{时,该值尚未更改{1}}。一切都很好;你过早地检查这个价值。