__block究竟做了什么?

时间:2012-11-14 08:54:35

标签: objective-c block xcode4.5

是的,如果块可能会更改变量,我们会这样做。

但屏幕背后真的发生了什么?

谁“拥有”这个对象?块或功能,还是谁?

__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];

}];

1 个答案:

答案 0 :(得分:5)

来自Appl doc

__块变量存在于存储中,该存储在变量的词法范围与在变量的词法范围内声明或创建的所有块和块副本之间共享。因此,如果在帧内声明的块的任何副本存活超出帧的结尾(例如,通过在某处排队以便稍后执行),则存储将在堆栈帧的破坏中存活。给定词法范围内的多个块可以同时使用共享变量。