如何在块中更改int值?

时间:2012-04-03 16:27:38

标签: 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);

1 个答案:

答案 0 :(得分:7)

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

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