我正在实例化并调度一个计时器变量,但是Xcode编译器和分析器将我的var“levelScoreTimer”标记为“警告:未使用的变量'levelScoreTimer'和”死存储:在初始化期间存储到'levelScoreTimer'的值'从来没有读过“。我的声明出了什么问题?scheduledTimerWithTimeInterval方法实例化并将计时器放在主运行循环上。我也从内部选择器方法停止计时器,因此确定使用计时器作为对象。有时类似通过在第一行声明变量类型并在第二行进行赋值,我将行分为两行。但它不是定时器对象的解决方案。有什么建议吗?这是我的声明和分配:
NSTimer *levelScoreTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTotalScoreLabelFromTimeLeftLabel:) userInfo:nil repeats: YES];
答案 0 :(得分:18)
从
更改代码NSTimer *levelScoreTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTotalScoreLabelFromTimeLeftLabel:) userInfo:nil repeats: YES];
到
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTotalScoreLabelFromTimeLeftLabel:) userInfo:nil repeats: YES];
答案 1 :(得分:2)
编译器应该是正确的,你确定你没有做错什么吗?发布更多代码。在每种情况下,您都可以将变量标记为未使用:
__unused NSTimer *timer = …;
我在断言中使用它,例如在生产代码中编译出来并导致警告:
__unused NSString *foo = …;
NSAssert(foo, @"Bar");
// foo no longer used
但在你的情况下,我几乎可以肯定编译器是对的。你说你“从选择器方法中停止时间”,你的意思是从计时器触发时调用的方法?你如何获得指向计时器的指针?因为你显然将它存储在那里不可用的局部变量中。
答案 2 :(得分:1)
您没有显示足够的剩余代码,以确定您是否真的 使用 存储在levelScoreTimer
中的值。如果这是一个局部变量,如果您在使用上面指定的值之前为其指定了其他内容,请查看您的方法。
根据我的经验,编译器比我们更了解这些事情。它不会错过或忘记任务,保留或释放,就像我们人类倾向于做的那样。
答案 3 :(得分:0)