2

只是出于兴趣,ARC 是否会处理此问题,或者您是否必须释放转换?

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

谢谢

4

1 回答 1

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()

于 2013-03-31T13:22:08.777 回答