如何在块中更改int值?

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)

Jos*_*ell 7

问题是,在assetForURL:...方法完成其工作之后,您正在发送该块以便稍后执行,这是异步执行的.它最有可能在后台线程或队列上,允许方法本身在工作继续时立即返回.

因此,该方法您运行之前assetForURL:...返回,这意味着当您到达第二个时,该值尚未更改.一切都很好; 你只是过早地检查价值.resultBlockNSLog