我有这样声明的 MyUnitClass
的实现:
@implementation MyUnitClass
Unit* _unit = NULL;
在 for 循环中,我迭代了很多次并创建了 MyUnitClass 的多个实例。
Unit
的行为就像一个静态变量。我在 MyUnitClass
的 init 方法中设置了一个断点,这是我每次初始化该类时得到的:
(gdb) print _unit
$4 = (Unit *) 0x112340
(gdb) print _unit
$5 = (Unit *) 0x112340
注意:
我已经通过将变量移动到 @interface
声明中解决了这个问题。如果您回答了这个问题,很高兴看到指向可以找到此信息的页面的链接。
最佳答案
这是因为您没有用大括号将变量括起来,使其成为全局变量。要修复,请尝试像这样定义它:
@implementation MyObject {
unsigned int myVar;
}
// rest of implementation
@end
只能有一个@implementation block ,所以如果它已经在.h 文件中声明,则需要在其中添加成员,或者需要将整个 block 移动到.m 文件中。
这是 C 的残余,编译器不太清楚您希望它成为 iVar,而不是全局变量。
关于iphone - 为什么这些 "member"变量表现得像静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11918863/