0

つまり、変数のストレージ タイプをログに記録できるかどうかを知る必要があります。

具体的には、変数に__blockストレージ タイプ修飾子が適用されているかどうかをログに記録したいと考えています。

理想的には、次のようなものを探しています:

NSLog(@"storage type: %@", [localVar storageType]);

ご参考までに、ここ数日間デバッグしてきたメモリ リークを突き止めたところだと思います。私の仮定が正しいかどうかをテストしたいと思います。

setCompletionBlockとでASIHttpRequest を使用しsetFailedBlockていますが、次のように、ブロックの実際のセットアップを行う便利なメソッドにリクエスト オブジェクトを渡しています。

- (void)getAllHighlights:success:(ASIBasicBlockWrapper)cb1 fail:(ASIBasicBlockWrapperFail)cb2{

    // blah blah blah

    __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setRequestMethod:@"GET"];
    [request setDelegate:self];

    [self executeAsynchronousRequest:request onSuccess:cb1 onFail:cb2];
}

次に、executeAsynchronousRequestブロックを設定してリクエストを開始します。

- (void) executeAsynchronousRequest:(ASIFormDataRequest *)request onSuccess:(ASIBasicBlockWrapper)cb1 onFail:(ASIBasicBlockWrapperFail)cb2
{
    [request setCompletionBlock:^{
        int statusCode = [safeRequest responseStatusCode];
        NSString *statusMessage = [self statusErrorMessage:statusCode];
        cb1([safeRequest responseString],statusMessage);
    }];
    [request setFailedBlock:^{
        cb2(safeRequest);
    }];

    [request startAsynchronous];    
}

私の勘では、リクエスト オブジェクトを として設定したとしても__block ASIFormDataRequest *request、 内executeAsynchronousRequestで使用すると、 としてしか入力されていないため、__block ストレージ タイプが失われていることがわかります(ASIFormDataRequest *)request

ありがとう!

4

1 に答える 1

0

requestブロックで変更していないため__block、何もしません...ブロックにリクエストを渡した場合、コピーされず、渡されたときにローカルスコープのバージョンが保持されますブロックに。

于 2012-04-23T22:51:08.620 に答える