ios - 当格式说明符错误地传递给方法时如何发出警告
<p><p>假设我有一个返回 <code>BOOL</code> 的方法,例如:</p>
<pre><code>+(BOOL) isNewCar {
//returns YES or NO
}
</code></pre>
<p>然后我在 <code>NSLog</code> 中使用这个方法:</p>
<pre><code>NSLog("Is my car new, the answer is %@", );
</code></pre>
<p>然后我得到编译器警告:</p>
<p> <a href="/image/pTyop.png" rel="noreferrer noopener nofollow"><img src="/image/pTyop.png" alt="enter image description here"/></a> </p>
<p>如果我忽略警告并运行,应用程序<strong>崩溃</strong>。
现在我有另一个名为 <code>printCar</code> 的方法,它接受变量参数,就像 <code>NSLog</code> 其实现是:</p>
<pre><code> -(void) printCar:(NSString *)msg, ... {
NSString * contents;
va_list args;
va_start(args, msg);
contents = [ initWithFormat:msg arguments:args];
va_end(args);
;
}
</code></pre>
<p>当我使用上述方法时:</p>
<pre><code>];
</code></pre>
<p>编译器<strong>不</strong>生成警告。此外,应用程序崩溃。</p>
<p><strong>问题</strong>:如果像 <code>NSLog</code> 那样为我们的自定义方法提供了错误的格式说明符,有没有办法生成警告??</p>
<p>提前致谢!</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>是的,你需要<code>NS_FORMAT_FUNCTION</code>宏来做到这一点,如果你按Command然后点击<code>NSLog</code>方法,你也可以看到它</p>
<pre><code>void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2)
</code></pre>
<p>你的方法</p>
<pre><code>-(void) printCar:(NSString *)msg, ...
</code></pre>
<p>变成</p>
<pre><code>-(void) printCar:(NSString *)msg, ... NS_FORMAT_FUNCTION(1,2)
</code></pre>
<p>你也可以Command Click <code>NS_FORMAT_FUNCTION</code>查看更多细节</p></p>
<p style="font-size: 20px;">关于ios - 当格式说明符错误地传递给方法时如何发出警告,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/33099891/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/33099891/
</a>
</p>
页:
[1]