objective-c - 变量是静态的,没有被声明,OSX iOS Apple 风格的 C 或 Obj-C?
<p><p>我遇到了一些,至少对我来说,Apple 在鼠标处理事件中使用的例程的奇怪行为,在文档中他们以静态方式使用变量而不是这样声明,这是前一段时间,但是如果你以 GLKit-lib 为例,它们表现出相同的行为,例如类似于以下内容:</p>
<pre><code>GLKVector3 GLKVector3Set(float x, float y, float z)
{
GLKVector3 v = { x, y, z };
return v;
}
</code></pre>
<p>在正常情况下,函数内声明的所有变量都放在堆栈上,并在函数返回调用时消失...</p>
<p>鼠标输入的情况与此类似:</p>
<pre><code>(void) mouseInput:(mouseEvent *)event
{
BOOL hasClicked = NO;
//
if(hasClicked)
{
//
} else {
hasClicked = YES;
}
}
</code></pre>
<p>这只有在 BOOL 被声明为静态时才有意义......</p>
<p>如果有人知道我在说什么并且可以解释这种行为或引用 Apple 在其网站上的解释,我会很高兴。</p>
<p>尼尔斯</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>第一个代码示例没问题。 <code>GLKVector3</code> 是一个结构(实际上是一个 union ),它不是静态的,它是按值返回的。它就像一个 <code>int</code> 一样工作。</p>
<p>第二个代码示例在编写时没有意义(<code>if</code> 已被优化器删除,可能会给您一个警告)。但是你说<em>和</em>很相似,所以我认为你理解错了。它与您发布的内容不同,只是您错过了某些东西并理解为那样。如果您想对其进行解释,请发布实际代码。</p>
<p>附录</p>
<p>正如你在评论中写的如何找到原始代码,我去检查了。原始代码与您的第二个示例完全不同。是这样的:</p>
<pre><code>BOOL keepOn = YES;
...
while (keepOn) {
....
switch (...) {
case ...
...
case ...
...
keepOn = NO;
break;
default:
...
}
}
...
</code></pre>
<p>这是有道理的,优化器不会删除任何内容。变量不是静态的。</p></p>
<p style="font-size: 20px;">关于objective-c - 变量是静态的,没有被声明,OSX iOS Apple 风格的 C 或 Obj-C?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/12074113/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/12074113/
</a>
</p>
页:
[1]