因此,首先,我要指出的是,這種類型的東西是比較容易做的基於塊的動畫的方法。對於iOS4和iOS5,Apple recommends that you use those newer methods instead。
但是要回答您的具體問題,上下文參數是一個void *。 ARC沒有(不能)維持對void *指針的任何管理,所以當你將'contextPoint'(這是一個NSValue *)傳遞給這個方法時,ARC就會有效地失去它的蹤跡。
編譯器將允許這與橋樑鑄造。但你也必須確保你的「contextPoint」生存超出了這個方法,所以你需要特定的鑄件__bridge_retained,這是一個+1淨鑄造保留計數:
[UIView beginAnimation:nil context:(__bridge_retained void *)contextPoint];
這解決了眼前的問題,希望你現在會泄露contextPoint。因此,在您animationDidStart:context:
或animationDidStop:finished:context:
(無論你打算用這個contextPoint),你需要的東西以平衡+1計數是這樣的:
NSValue *contextPoint = (__bridge_transfer NSValue *)context;
這橋是ARC的控制之下對象背部和__bridge_transfer告訴ARC發佈該對象用於平衡早先的__bridge_retained。
再次,使用基於塊的方法,讓ARC和塊爲你照顧這些事情。他們已經知道如何正確捕獲並保留動畫或完成塊中需要的對象。
我希望這是有道理的。
它顯示另一個錯誤 – Priya 2011-12-15 06:05:25