gpt4 book ai didi

objective-c - 方法内部的变量声明在实例化之前导致 gdb 垃圾输出

转载 作者:行者123 更新时间:2023-11-29 05:07:12 25 4
gpt4 key购买 nike

这是一个非常奇怪的问题,我想知道我是否需要稍微改变一下我的编码风格,或者 gdb 是否对我产生了干扰。

我的方法之一的结构如下所示:

{
// code that checks if this method needs to do something
// ...

// further down, I instantiate e.g. foo as an NSArray
NSArray *foo = bar;
// ...
}

如果我调试上面的代码,我碰巧有一个名为sizes的NSDictionary。因为我在方法中实例化 foo 的一些行,所以我一直在控制台中收到这些错误,直到创建 foo:

-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x541cb90

发生这种情况的原因是size和foo都指向同一个内存0x541cb90。但由于我什至还没有创建 foo,所以我对此无能为力。该错误反复出现,直到我进入 foo = bar 点,该错误停止出现。我认为它出现的原因是因为它试图在右侧的调试变量窗口中向我显示它的值。

这可能与 libXcodeDebuggerSupport.dylib is missing in iOS 4.2.1 development SDK 有关

在这样的方法中“整个”声明变量是不是一种不好的做法?在最顶部的方法中声明我打算使用的每个变量感觉很浪费,但也许我必须......?

最佳答案

我还没有看到这个特定的问题,但我非常倾向于将变量声明得尽可能接近它们的使用位置——就像你正在做的那样。

作为对 Apple 态度的一种测试,我登录了 iOS 开发者中心并随机获取了示例代码项目 avTouch、GLSprite 和 AccelerometerGraph。

其中,avTouch 在 avTouchController.mm 的第 171、183 和 188 行明确声明了变量 mid-method。还有一些声明在 block 的顶部(在老式意义上,而不是 GCD 意义上)。

GLSprite 在 EAGLView.m 的第 107 行和第 108 行包含中间方法声明。

AccelerometerGraph 在 GraphView.m 的第 257、332 和 516 行包含类似的声明,以及 block 顶部的更多变量示例。

在所有项目中,我都没有看到似乎被人为移动到方法顶部的变量。

所以我倾向于认为苹果同意你我的观点。这只是 Xcode 图形前端对 GDB 没有帮助。

关于objective-c - 方法内部的变量声明在实例化之前导致 gdb 垃圾输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423317/

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