我遇到了一個涉及CATiledLayer的有趣的iOS問題。這隻發生在設備上 - 不在模擬器中。在關聯視圖消失後調用了CATiledLayer drawInContext
我的視圖通過drawLayer:inContext:delegate回調來繪製它的CALayer。該圖層具有一個CATiledLayer派生的子圖層,該圖層在重寫的drawInContext:方法中執行自己的繪圖。
兩層都通過CGContextDrawPDFPage()渲染pdf內容。 (CALayer繪製低分辨率版本,而CATiledLayer子圖層則在頂部繪製高分辨率內容。)
我遇到了一個場景,我將完成視圖 - 將其從超級視圖中移除並釋放它。在視圖上調用dealloc()。稍後,系統會調用CATiledLayer的drawInContext:方法(在後臺線程上)。它會畫,但從Springboard崩潰的方法返回,並且這樣做,也會導致我的應用程序。
我通過在CATiledLayer中設置一個標誌,從視圖的dealloc方法中告訴它不再渲染來修復它。
但我只能想象有一種更優雅的方式。爲什麼CATiledLayer的drawInContext:方法仍然在父層之後被調用,並且父層的視圖被釋放了?關閉視圖的正確方法是什麼,所以這不會發生?
這對我來說非常好,簡單而有效。 – 2011-09-12 09:02:27
如果視圖已經被釋放,self.superview(一個自我訪問,一個釋放對象)如何工作? – 2012-09-11 08:26:31