0

我有一个带有 BOOL 属性(不是指针)的视图控制器,我认为它是 NO 或者只是垃圾,好像它没有在 viewDidLoad 中分配。BOOL 在需要时被分配。当视图控制器被释放(我正在使用 arc)并稍后重新创建时,如果该 BOOL 的先前实例值为 YES(在 VC 被释放之前),那么新实例 BOOL 变量的初始值也将为 YES。发现这很奇怪。

  1. 声明的属性(非原子,分配)
  2. 它不是在 viewDidLoad 中设置的,而是在 action 方法的其他地方设置的
  3. 在 dealloc 中没有改变

我知道这很奇怪,同时我在 viewDidLoad 中设置了适当的默认值。

更新

请记住,这是在 BOOL 作为 iVar 时发生的(我将其更改为属性),并且在分配 BOOL 之前进行了比较。我把奇怪的行为归结为这一点。

4

2 回答 2

0

YES有了垃圾,您获得比的机会要大得多NO,因为!=0比现在更多的价值==0:)

但是,类型的 AFAIK 实例变量BOOL将被初始化为NO(因为所有 ivars 都设置为 0),即使我没有查找它,我认为这也适用于自动合成的属性支持 ivars。这将说明它是NO每一次。

您是否观察到它总是反映旧状态,即两者YESNO在 dealloc 之后被保留?我的猜测是,上述假设要么不正确,要么实例并未真正解除分配。您是否检查过实例地址是否相同?

于 2013-03-19T15:04:41.617 回答
0

原来它们最初是在实例之间保留它们的全局变量。

于 2013-03-20T09:37:33.087 回答