我有一個UIView類,它使用自定義的CALayer派生支持層。即,我有一個靜態的layerClass方法,它返回我的自定義CALayer類的類。UIView支持層 - 委託是殭屍
+ (Class)layerClass
{
return [CellLayer class];
}
在這一類(CellLayer)我投委託給類,它包含背襯層了UIView的 - 即,drawInContext:
方法內我這樣做:
CellClass* cell = (CellClass*)self.delegate;
(其中CellCass是UIView的一個子類)
這似乎工作正常,除了有時調用drawInContext:
方法,委託是殭屍(NSZombieEnabled設置爲TRUE)。
看來發生了什麼事情是,當從其超級視圖(這是一個UIScrollView)中刪除單元格對象時,單元格會在釋放內部層之前釋放,並且內部層獲得drawInContext:
調用。 NSLog語句顯示最終調用了BOTH dealloc方法(即UIView和CALayer的dealloc都被調用了),但我無法確定自從應用程序使用這個命令以來有多少順序 - 有幾十個這樣的單元 - 我想我可以更改NSLog以在控制檯中顯示單元格的地址,並匹配一個UIView dealloc和一個CALayer dealloc,但是我並沒有打算這樣做。
我的期望是在包含它的UIView之前釋放背層。
這是正確的行爲嗎?我目前的解決方法是在UIView的dealloc中,我在背景層(viewWasReleased
)和drawInContext中設置了一個標誌,如果這個標誌被設置,我會簡單地返回。
有沒有更好,更乾淨的方法來做到這一點?