0

真夜中までカウントダウンし、ビープ音を何度も再生し、時間を示すラベルを点滅させる単純なアプリケーションがあります。したがって、ラベルの点滅は NSTimer を使用し、ビープ音は独自のスレッドで発生するため、純粋な C 関数 (システム サウンド ID 完了コールバック用) は [NSThread sleepForTimeInterval:...]; を使用できます。アラームのビープ音を再生する間に少し待ちます。そのため、実行中に自動解放プールがなく、リークするという 2 つのエラー メッセージが表示されます。これは、新しいスレッドに呼び出すメソッドに、システム サウンド ID (ファイル名と拡張子) を作成するために使用される 2 つの @"Strings" があるためです。自動解放プールを使用できない方法はありますか?これは、使用しようとする唯一の 2 つのものであるためです。ありがとう。

または、別のスレッドの代わりに 2 つの NSTimer を使用する必要がありますか?

Ben Gottlieb の答えは正しかったのですが、代わりに別の NSTimer を使用することにしました。これは、コードの実際の実行としてスレッドをスリープ状態にすると、少し時間がかかる前に実際に同期されていないことを忘れていたためです。そして、それは物事を対称的にします;)。

4

1 に答える 1

2

スレッド メソッドで自動解放プールを作成するだけです。

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

...thread body...

[pool release];

于 2009-10-01T01:40:14.180 に答える