我遇到了UIView動畫塊的奇怪事情。iOS沒有清理UIView動畫的完成塊嗎?
我運行我的動畫代碼後從未釋放的視圖。在調用動畫代碼之前,我將view屬性設置爲nil。然後在完成塊內,我將它從超視圖中刪除,所以淡出後它不見了。
但是,淡出和刪除視圖的-dealloc從不會被調用。然後,我想可能完成塊保留了視圖,並使用__weak
工作的弱參考。突然,動畫完成後視圖正常釋放。
但是在動畫塊本身中,我只是引用視圖並將其alpha設置爲0.沒有__weak
引用,仍然視圖正常釋放。
結論: iOS在動畫完成後清理動畫塊。但它不會清理完成塊。意思是:對於完成塊中的所有內容,您必須使用__weak引用,因爲它會一直存在。
是否有一種神奇的方式來觸發完成塊處理或清理,因此它釋放所有強引用?當然我使用ARC btw。
我希望你已經知道你的結論是錯誤的。您可能會有一個保留週期,因爲Caleb建議*如果* self'對引起內存泄漏的完成塊持有強烈的引用。但是,如果你使用標準的'+ [UIView animate ...'方法,就不會發生這種情況。只有在發佈代碼時才能夠進一步提供幫助。 – Mar0ux