0

当我的应用程序启动时,它会循环将带有网格上坐标键的随机数值添加到字典中。这是一些代码:

[grid setObject:v forKey:k];

K 是“xy”形式的字符串,其中 x 和 y 是个位数整数,V 是 NSNumber。这两个都在添加之前记录到控制台,所以我知道这些不是问题。然而,尽管这段代码运行了 49 次(对于 7 x 7 网格),字典最后还是空的。

网格在我的头文件中定义:

NSMutableDictionary *grid;

然后我在应用程序加载时初始化它(但我不知道我是否必须这样做)使用代码:

grid = [[[NSMutableDictionary alloc] init] retain];

这真的让我很困惑,因为我才刚刚开始学习 Objective-C,而且我来自更宽容的 C# 和 Python 世界。

在此先感谢您的帮助!

4

1 回答 1

3

nil在 Objective-C 中,向(nullC# 世界中的引用)发送消息是合法且常见的。结果是nil,所以通常会默默地过去。一旦您对此有所了解,它就是一个非常有用的工具,可以使代码更加简洁(不检查 null 等)。因此,在向字典添加条目的行处放置一个断点。为此,请单击 Xcode 中该行旁边的装订线。打开断点运行您的应用程序。当调试器停在该行时,您可以将鼠标悬停在grid. 我怀疑你会看到它是nil0x0)。您还可以打开运行控制台并键入po grid以打印 gdb 对grid. 同样,我想你会发现它是零。

如果没有看到更多代码,就不可能帮助您找出为什么gridnil.

附带说明一下,您不需要额外的-retain以下alloc/init. 阅读 Cocoa 的内存管理编程指南。它将是你的朋友。

于 2010-02-19T23:22:00.897 回答