1
LooK此方法: beginAnimations:context: 這是UIView類的方法。上下文需要參數,它是一種空指針類型,我需要將UIImageView發送到上下文。 我收到警告,說當我使用ARC時void *已被禁止。那麼如何將UIImageView發送到上下文,除非不使用ARC。當我在IOS項目中使用ARC時,如何使用void *?
LooK此方法: beginAnimations:context: 這是UIView類的方法。上下文需要參數,它是一種空指針類型,我需要將UIImageView發送到上下文。 我收到警告,說當我使用ARC時void *已被禁止。那麼如何將UIImageView發送到上下文,除非不使用ARC。當我在IOS項目中使用ARC時,如何使用void *?
上面的評論爲這種特殊情況提供了正確的答案(使用基於塊的動畫方法),但是一般情況下,如果你有一個API需要上下文void *
並且你想傳遞一個對象,我發現它最好將您的id
轉換爲CFTypeRef
,這樣您就可以在指針上獲得手動內存管理語義(CFTypeRef
是void *
的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);
...
}
使用的UIView的塊動畫的方法。這樣更方便,因爲您不需要在其他地方使用動畫完成代理。 – 2012-07-07 15:50:06
加上文檔說使用塊動畫方法。 – 2012-07-07 15:54:35
感謝您的幫助。我將學習使用UIView的塊動畫方法。 – 2012-07-07 15:58:42