2012-07-07 98 views
1

LooK此方法: beginAnimations:context: 這是UIView類的方法。上下文需要參數,它是一種空指針類型,我需要將UIImageView發送到上下文。 我收到警告,說當我使用ARC時void *已被禁止。那麼如何將UIImageView發送到上下文,除非不使用ARC。當我在IOS項目中使用ARC時,如何使用void *?

+2

使用的UIView的塊動畫的方法。這樣更方便,因爲您不需要在其他地方使用動畫完成代理。 – 2012-07-07 15:50:06

+0

加上文檔說使用塊動畫方法。 – 2012-07-07 15:54:35

+0

感謝您的幫助。我將學習使用UIView的塊動畫方法。 – 2012-07-07 15:58:42

回答

0

上面的評論爲這種特殊情況提供了正確的答案(使用基於塊的動畫方法),但是一般情況下,如果你有一個API需要上下文void *並且你想傳遞一個對象,我發現它最好將您的id轉換爲CFTypeRef,這樣您就可以在指針上獲得手動內存管理語義(CFTypeRefvoid *的typedef)等等。但請注意,這需要調用回調必須才能讓您的對象被釋放(即轉換回ARC的內置管理)。

下面是一些虛構的API我只是想出了一個例子:

- (void) doSomethingWithObject: (id) object { 
    // use CFBridgingRetain() to turn object into a manually-retained CFTypeRef/void* 
    [someObject performBackgroundTaskWithTarget: self 
             selector: @selector(bgTask:) 
             context: CFBridgingRetain(object)]; 
} 

- (void) bgTask: (void *) context 
{ 
    // use CFBridgingRelease() to turn our void*/CFTypeRef into an ARC-managed id 
    id object = CFBridgingRelease((CFTypeRef)context); 
    ... 
} 
相關問題