2013-03-19 55 views
0

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

  1. 财产申报(非原子,分配)
  2. 它不是在viewDidLoad中设置,在一个操作方法在其他地方设置
  3. 在dealloc中不改变

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

UPDATE

铭记这是与布尔的伊娃(我把它改成一个属性)和比较发生被做了BOOL被分配之前。我将这种奇怪的行为归咎于此。

+0

您的视图控制器是否被延迟加载,然后由父视图控制器保持在加载之间? – 2013-03-19 15:09:38

+0

这是重新创建的父级,因此是层次结构的其余部分。我在dealloc上插入了一个断点,我肯定它与我检查内存地址的实例不一样,此外还有可视化指示:D – BodaciousPie 2013-03-19 15:28:51

+0

奇怪。它是否被声明为静态BOOL? – 2013-03-19 15:46:33

回答

0

垃圾你获得YESNO的一个更大的机会,因为更多的值比!=0==0 :)

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

你是否注意到它总是反映旧的状态,即dealloc后保存YESNO?我的猜测是,上述假设不正确或者实例没有真正释放。你有没有检查实例地址是否可能相同?

+0

我检查了地址,它们不完全相同。如果前面的实例被解除分配BOOL属性值为YES,那么新实例最初将保持YES值,反之亦然。 – BodaciousPie 2013-03-19 15:24:57

+0

我认为你需要为你的问题添加一些代码。只是从描述我不知道可能是什么。 – 2013-03-19 15:48:00

0

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

相关问题