首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制未使用的变量成为块的一部分?

如何强制未使用的变量成为块的一部分?
EN

Stack Overflow用户
提问于 2011-05-17 02:10:23
回答 3查看 204关注 0票数 1

考虑以下代码:

代码语言:javascript
复制
- (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) {},但这两个并不能真正表达我想要做的事情。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-20 05:14:37

几年后,我找到了最简单的答案。在代码块内部,使用:

代码语言:javascript
复制
(void)variable;

示例:

代码语言:javascript
复制
- (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];
}

如果您只想在调试中使用:

代码语言:javascript
复制
- (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];
}
票数 0
EN

Stack Overflow用户

发布于 2011-05-17 02:18:47

#ifdef debug.. #endif中封装对NSLog()的调用

票数 3
EN

Stack Overflow用户

发布于 2011-05-17 02:54:55

我想到了一个更好的答案,但感谢@NSResponder让我这样想:

代码语言:javascript
复制
#if DEBUG
#define FORCE(a) NSParameterAssert(YES || a)
#else
#define FORCE(a)
#endif

这使得代码看起来像这样:

代码语言:javascript
复制
- (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];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6021510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档