2

興味深いことに、ARC はこれを処理しますか、それとも変換を解放する必要がありますか?

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

ありがとう

4

1 に答える 1

4

正確に準拠するものは何もありません。ARC は、Objective-C の参照カウント (オブジェクトのメモリ管理) に関するものです。Core Foundation API は Cです。CGAffineTransformは Cstructです。C 構造体は参照カウントされず、retain や release などのオブジェクト メッセージを送信できません (コンパイルされません)。これは、CGAffineTransform 構造体をどこかで手動で解放する必要があることを非常に単純に意味します。良い点の 1 つは、それを作成してメソッドまたは関数でのみ使用できるため、その有効期間がそれに限定されることです。それ以外の場合は、プロパティまたは ivar として使用する必要があるため、オブジェクト インスタンスのワイプで処理されます。

いずれにせよ、これらの方法のいずれかで使用される限り、特別な心配をする必要はありません (これらを大量に作成している場合を除きます)。以下に示すように、それほど大きくはありません...

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

ストレート C で、またはこれらを多用している場合は、malloc() (またはそのいとこの 1 つ) と free() を実行したくなるでしょう。

于 2013-03-31T13:22:08.777 に答える