1

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

但幕后究竟发生了什么?

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

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

}];
4

1 回答 1

5

来自应用文档

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

于 2012-11-14T08:59:10.270 回答