简而言之,我需要知道我是否能够记录变量的存储类型。
具体来说,我想记录一个变量是否应用了__block
存储类型修饰符。
理想情况下,我正在寻找类似的东西:
NSLog(@"storage type: %@", [localVar storageType]);
如果你想知道,我想我刚刚想出了过去几天我一直在调试的内存泄漏,我想测试一下我的假设是否正确。
我正在使用带有setCompletionBlock
和setFailedBlock
的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} }。
谢谢!
答案 0 :(得分:0)
你没有修改一个块中的request
,所以__block
不会为你做任何事情......如果你把请求传递给一个块,它就不会复制后,当您将其传递到块中时,它将保留本地范围的版本。