2012-11-14 209 views
1

是的,我们这样做,如果块可能会改变变量。__block究竟做了什么?

但是屏幕背后发生了什么?

谁拥有“对象”?该块或功能,或谁?

__block如何使不同?

下面是一些示例:

__block NSError * error=nil; 
__block NSURLResponse *urlresponse=nil; 
__block NSData *response = nil; 
NSString *json_string=nil; 

[BGHPTools computeTimeWithName:FUNC block:^{ 
    response= [NSURLConnection sendSynchronousRequest:request returningResponse:&urlresponse error:&error]; 

}]; 

回答

5

从申请doc

__block变量生活在被声明或内变量的创建的变量的词法作用域和所有块和块拷贝之间共享存储词汇范围。因此,如果在帧中声明的块的任何副本存活超过帧的末尾(例如,通过在某处等待以后执行),那么存储器将在存储器堆栈帧的销毁中幸存下来。给定词法范围中的多个块可以同时使用共享变量。

+1

够好。我认为你需要一种解释更多的方法。例如,这和普通变量有什么区别? –

+0

__block变量是否存在于堆栈或堆中?这是一个开始。 –