考虑以下代码:
- (void)downloadObjectUsingURL: (NSURL *)url;
{
id file = [self createFileForURL: url];
Finalization objectFinalization = ^() {
// we don't access url here, but it would be handy to see it in the debugger
[file close];
}
id request = [self buildRequestFromURL: url];
[object download: request
toFile: file
finalization: objectFinalization];
}为了便于调试,强制将url作为objectFinalization上下文的一部分复制并作为objectFinalization的一部分传递的最简单方法是什么?
我能想出几个可能的答案,但没有一个给我留下好印象。我可以做NSLog(@"%@",url),但那会导致吐痰。我可以做一个NSAssert(url,...);或if (url) {},但这两个并不能真正表达我想要做的事情。
发布于 2013-03-20 05:14:37
几年后,我找到了最简单的答案。在代码块内部,使用:
(void)variable;示例:
- (void)downloadObjectUsingURL: (NSURL *)url;
{
id file = [self createFileForURL: url];
Finalization objectFinalization = ^() {
(void)url;
[file close];
}
id request = [self buildRequestFromURL: url];
[object download: request
toFile: file
finalization: objectFinalization];
}如果您只想在调试中使用:
- (void)downloadObjectUsingURL: (NSURL *)url;
{
id file = [self createFileForURL: url];
Finalization objectFinalization = ^() {
#if DEBUG
(void)url;
#endif
[file close];
}
id request = [self buildRequestFromURL: url];
[object download: request
toFile: file
finalization: objectFinalization];
}发布于 2011-05-17 02:18:47
在#ifdef debug.. #endif中封装对NSLog()的调用
发布于 2011-05-17 02:54:55
我想到了一个更好的答案,但感谢@NSResponder让我这样想:
#if DEBUG
#define FORCE(a) NSParameterAssert(YES || a)
#else
#define FORCE(a)
#endif这使得代码看起来像这样:
- (void)downloadObjectUsingURL: (NSURL *)url;
{
id file = [self createFileForURL: url];
Finalization objectFinalization = ^() {
FORCE(urL);
[file close];
}
id request = [self buildRequestFromURL: url];
[object download: request
toFile: file
finalization: objectFinalization];
}https://stackoverflow.com/questions/6021510
复制相似问题