2013-03-31 53 views
2

僅僅出於興趣,ARC是否處理了這個問題,還是您必須發佈變換?CGAffineTransform是否符合ARC?

UISlider *slider = [[UISlider alloc] init]; 
CGAffineTransform transform = CGAffineTransformMakeRotation (DEGREES_TO_RADIANS(90)); 
slider.transform = transform; 

感謝

回答

4

沒有符合準確。 ARC是關於Objective-C引用計數(對象的內存管理)。核心基金會API是C. CGAffineTransform是一個C struct。 C結構體沒有引用計數,它們不能被髮送諸如保留和釋放之類的對象消息(它不會被編譯)。 這意味着非常簡單,必須在某處手動釋放CGAffineTransform結構。 一件好事是,您可以創建它並僅將其用於方法或函數,因此其生命週期的範圍就是這樣。 否則,您應該將其用作屬性或ivar,因此將通過擦除對象實例來處理它。

無論哪種方式,只要它用於其中一種方式,您應該沒有任何奇特的擔憂(除非您正在創造很多) 正如您在下面看到的,它不是很大。 ..

struct CGAffineTransform { 
    CGFloat a; 
    CGFloat b; 
    CGFloat c; 
    CGFloat d; 
    CGFloat tx; 
    CGFloat ty; 
}; 
typedef struct CGAffineTransform CGAffineTransform; 

在直C,或者如果你有一些大量使用的這些,你會開始想要做的malloc()(或它的表兄弟之一)和free()