__block究竟做了什么?

use*_*951 1 block objective-c 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];

}];
Run Code Online (Sandbox Code Playgroud)

jit*_*roy 5

来自Appl doc

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