【发布时间】:2012-08-17 22:26:24
【问题描述】:
我遇到了一些,至少对我来说,Apple 在鼠标处理事件中使用的例程的奇怪行为,在文档中他们以静态方式使用变量,而不是这样声明,这是前一段时间,但是如果你以 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 在其网站上的解释,我会很高兴。
尼尔斯
【问题讨论】:
-
按值返回局部变量没有什么问题 - 当您尝试返回对局部变量的引用或指针时,问题就开始了。
-
谢谢保罗,这部分很清楚。我通常不会那样传递整个结构,所以今天发生了一些启发:)
标签: objective-c ios c macos