为什么在实例之间保留我的原始类型状态?

时间:2013-03-19 14:56:06

标签: ios objective-c-2.0

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

  1. 声明的属性(非原子,分配)
  2. 未在viewDidLoad中设置,在动作方法的其他位置设置
  3. 在dealloc中未更改
  4. 我知道这很奇怪,与此同时我在viewDidLoad中设置了相应的默认值。

    更新

    请记住,BOOL作为iVar发生了这种情况(我将其更改为属性)并且在分配BOOL之前进行了比较。我把这种奇怪的行为归咎于此。

2 个答案:

答案 0 :(得分:0)

对于垃圾,您获得YES的可能性要大于NO,因为!=0的值比==0更多:)

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

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

答案 1 :(得分:0)

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