2012-04-03 186 views
2

如何变化int值块,我有这样的:如何更改块中的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

什么是超长的? – Ali 2012-04-03 16:31:18

+2

如果这是你真正的代码,那么问题在于,Block刚刚没有被执行。你的代码中的第二个'NSLog'究竟在哪里?实际上在“out block value”之前是否在日志中看到“需要的大小”,或者他们是否相反? – 2012-04-03 16:32:12

+0

一秒钟..我会尽快更新! – 2012-04-03 16:34:20

回答

7

的问题是,您所发送的是封锁某个时候在以后执行,该assetForURL:...方法已完成其工作,它做后异步。这很可能在后台线程或队列中,允许方法本身在工作继续时立即返回。

所以assetForURL:...返回你的resultBlock已运行之前,这意味着该值的方法还没有被改变,由你到了第二NSLog的时间。一切工作正常;你只是太早检查价值。

+0

thx用于说明^ _ ^ – 2012-04-03 17:05:18