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 に答える