需要记录本地变量的存储类型

时间:2012-04-23 22:32:54

标签: iphone objective-c ios asihttprequest objective-c-blocks

简而言之,我需要知道我是否能够记录变量的存储类型。

具体来说,我想记录一个变量是否应用了__block存储类型修饰符。

理想情况下,我正在寻找类似的东西:

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

如果你想知道,我想我刚刚想出了过去几天我一直在调试的内存泄漏,我想测试一下我的假设是否正确。

我正在使用带有setCompletionBlocksetFailedBlock的ASIHttpRequest,但我将我的请求对象传递给一个方便的方法来执行块的实际设置,如下所示:

- (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存储类型,因为它只被输入{{1} }。

谢谢!

1 个答案:

答案 0 :(得分:0)

你没有修改一个块中的request,所以__block不会为你做任何事情......如果你把请求传递给一个块,它就不会复制后,当您将其传递到块中时,它将保留本地范围的版本。