2012-07-11 40 views
0

我對iOS應用程序有一個有趣的內存管理問題。發佈UIViewController作爲屬性

  1. 我有使用時釋放[self.propertyName release];將導致被釋放兩次財產,造成不好的存儲器訪問異常一個iPad 1/4的iOS設備上(在屬性的的dealloc)的性質。

  2. 當這個碼被改變成[_propertyName release];(訪問本地變量代替屬性),這將導致在iPad 3 /的iOS 5.

當然的泄漏,我可以通過檢查操作系統版本來阻止這種情況的發生,但我想了解我做錯了什麼。

更多的細節:

該物業的UIViewController一個子類,因爲是誰擁有屬性的對象。我將該屬性的UIView作爲子視圖添加。我聽說這不是好習慣,但我們正在其他地方做,而沒有記憶問題。

試驗情況是:

  • ipad公司1,的iOS 4.2 - 需要使用的ivar [_propertyName release]

  • iPad 2的,安裝iOS 5.0釋放 - 需要使用屬性[self.propertyName release]

  • 釋放
  • iPad 3,iOS 5.1 - 需要使用屬性發布[self.propertyName release]

+0

我們需要編碼繼續。顯示這個var的聲明,以及你釋放的地方。 – CodaFi 2012-07-11 05:08:07

回答

0

將另一個viewController的視圖添加爲子視圖必然會導致奇怪的問題,當你釋放其他viewController它的視圖仍然會被你的主視圖保留,但它的viewController將會消失。

也就是說self.propertyName = nil是發佈屬性的最佳方式,只要確保您先從主視圖中刪除子視圖即可。