gpt4 book ai didi

objective-c - 变量是静态的,没有被声明,所以,OSX iOS Apple 风格的 C 或 Obj-C?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:14:05 24 4
gpt4 key购买 nike

我遇到了一些,至少对我来说苹果在鼠标处理事件中使用的例程的奇怪行为,在文档中他们以静态方式使用变量但没有声明它,这是前一段时间,但是如果你以 GLKit-lib 为例,它们表现出相同的行为,例如类似于此的行为:

GLKVector3 GLKVector3Set(float x, float y, float z)
{
GLKVector3 v = { x, y, z };
return v;
}

在正常情况下,函数内声明的所有变量都放在堆栈上,并在函数返回调用时消失...

鼠标输入的情况与此类似:

(void) mouseInput:(mouseEvent *)event
{
BOOL hasClicked = NO;
//
if(hasClicked)
{
//
} else {
hasClicked = YES;
}
}

只有当 BOOL 被声明为静态时才有意义...

如果有人知道我在说什么并且可以解释这种行为或引用 Apple 在其网站上的解释,我会很高兴。

尼尔斯

最佳答案

第一个代码示例就可以了。 GLKVector3 是一个结构(实际上是一个 union ),它不是静态的,它是按值返回的。它的工作原理就好像它是一个 int

第二个代码示例在编写时没有意义(优化器删除了 if 并且可能会给您警告)。但是你说类似于,所以我认为你弄错了。它与您发布的内容不相似,只是您错过了一些东西并将其理解为那样。如果您需要解释,请发布实际代码。

附录

评论里写了怎么找原码,我去查了下。原始代码与您的第二个示例完全不同。它是这样的:

BOOL keepOn = YES;
...
while (keepOn) {
....
switch (...) {
case ...
...
case ...
...
keepOn = NO;
break;
default:
...
}
}
...

这确实有意义,优化器不会删除任何内容。变量不是静态的。

关于objective-c - 变量是静态的,没有被声明,所以,OSX iOS Apple 风格的 C 或 Obj-C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12074113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com