つまり、変数のストレージ タイプをログに記録できるかどうかを知る必要があります。
具体的には、変数に__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
。
ありがとう!