iOS 5 SDKを使用してiOSアプリケーションを開発しています。自動参照カウントが有効になっています。しかし、私は大量に作成されている特定のオブジェクトを持っており、そうしなければデバイスが非常に遅くなるため、1秒後に解放する必要があります。デバイスが非常に遅いので、リリースされていないようです。 ARCが有効になっているときに手動でオブジェクトを解放する方法はありますか?iOS:ARCを有効にしてメモリからオブジェクトを削除するにはどうすればよいですか?
EDIT:私のコードでは、これは輝きを生成するために200回/秒と呼ばれます。彼らは0.8秒後に消えるので、その後は役に立たない。
int xanimationdiff = arc4random() % 30;
int yanimationdiff = arc4random() % 30;
if (arc4random()%2 == 0) {
xanimationdiff = xanimationdiff * -1;
}
if (arc4random()%2 == 0) {
yanimationdiff = yanimationdiff * -1;
}
Sparkle *newSparkle = [[Sparkle alloc] initWithFrame:CGRectMake(20 + arc4random() % 280, 20, 10, 10)];
//[newSparkle setTransform:CGAffineTransformMakeRotation(arc4random() * (M_PI * 360/180))]; //Rotatie instellen (was niet mooi, net sneeuw)
[self.view addSubview:newSparkle];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[newSparkle setFrame:CGRectMake(newSparkle.frame.origin.x - xanimationdiff, newSparkle.frame.origin.y - yanimationdiff, newSparkle.frame.size.width, newSparkle.frame.size.height)];
newSparkle.alpha = 0;
[UIView commitAnimations];
輝きのオブジェクトコード:ARCで
#import "Sparkle.h"
@implementation Sparkle
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"sparkle.png"]]];
}
return self;
}
@end
質問に自分のコードを追加しました。 – icant
あなたはオブジェクトを 'nil'に設定できませんか?私はループの中に多くのNSArrayとDictionaryオブジェクトを構築しているので、グローバル配列に追加するので心配しています。そのあとでそれらを必要としません。ループ内に構築されたオブジェクトをARCが削除する方法は? – applefreak
これはそれほど効果的ではありません。forループ内にオブジェクトを作成し、それらをグローバル配列に追加する場合、オブジェクトは保持されます。それらはグローバル配列から削除されるまで解放されません(つまり、保持カウントはゼロです)。 – lxt