2013-03-19 72 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

原來,它們最初是全局變量,它們在實例之間保留它們。

相關問題