• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 15:45:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

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

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

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

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

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

尼尔斯



Best Answer-推荐答案


第一个代码示例没问题。 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap