2013-10-10 32 views
0

我正在使用的非ARC預編譯靜態庫在我的主線程上發送了我的ARC應用程序「事件」NSObject,它已放置在主線程的自動釋放池中。我的應用程序在處理函數中作用於事件對象,但不保留或釋放它,並且不再使用它。發送到ARC代碼的非ARC庫對象。 Overreleased?

隨着對,我當主事件循環水渠頂級自動釋放池,以及這些事件NSObjects的一個被釋放我偶爾會得到一個休息的殭屍。它聞起來像ARC已經發布了事件對象(可能當它在我的處理程序中超出範圍),然後主事件循環再次釋放它。

這是一個似是而非的理論,或者是這不可能,我有另一種錯誤?

如果可能的話,我能在我的應用程序做,以防止這種情況?

+0

是否有多個線程? –

+2

由於ARC /非ARC不匹配導致保留計數錯誤計算時的錯誤應始終發生,或根本不會發生。我強烈懷疑這是怎麼回事。 – dasblinkenlight

+0

是的,有多個線程,但這裏的所有動作都發生在主線程上。 – PatchyFog

回答

0

從你的描述,將自動釋放的作品,因爲它應該 - 該功能自動釋放對象,這意味着你可以使用它,但那麼它在自動釋放池年底發佈。

默認情況下使用自動釋放池的主循環。然而,沒有任何東西阻止你將你的呼叫包裝到@autorelease區塊中,並檢查物體是否在正確的時間被釋放。