2012-02-23 9 views
-1

可能性の重複:間違ってデクリメント


How do I use NSTimer
Decrement Issue

私は本当に、次の警告を取り除くのに苦労しています私が持っているオブジェクトの参照カウントの不正確な減少この時点では発信者が所有していません。

コードがコンパイルされ、アプリが正常に動作しているようです。基本的には、ボタンを押したときに短いオーディオクリップを再生するクラスのオブジェクトを作成しようとしています。私はファイルを再生するクラスを作成し、オブジェクトはファイル名を文字列として渡します。ここで

は、コードは次のとおりです。

- (IBAction) playKick 
{   
    PlayAudio *thisPlayAudio= [[[PlayAudio alloc] init] playFile:(@"RockSnare")]; 
    [thisPlayAudio release]; 
} 

私は他の記事を読みましたし、任意のヘルプははるかに高く評価されるだろう!

+0

これを自動解除してください。 – fibnochi

+0

お返事ありがとう!私はこのコードを使って自動リリースしようとしました。(IBAction)playKick { PlayAudio * thisPlayAudio = [[[PlayAudio alloc] init] playFile :(@ "file")] autorelease]; }しかし、「未使用の変数」という警告が表示され、「アナライザー」の警告は表示されません。 – Martin

+1

このコードはうまくいきます(少し慣習的ではなく、おそらく実装の詳細に頼っていれば)。この方法に問題があるのは確かですか?警告はどの行を指していますか? – Jasarien

答えて

1

playFile:メソッドの戻り値の型は何ですか?あなたはあなたがそれを呼び出す同じオブジェクトを返すと確信していますか?

たぶん、あなたのコードは次のようになります。

PlayAudio *thisPlayAudio= [[PlayAudio alloc] init]; 
[thisPlaysAudio playFile:@"RockSnare"]; 
[thisPlaysAudio release]; 

あるいは

[[[[PlayAudio alloc] init] autorelease] playFile:(@"RockSnare")]; 
2

PlayAudioのクラス定義を参照する必要がありますが、playFileメソッドがPlayAudioインスタンスを返すかどうかは疑問です。

PlayAudio *thisPlayAudio = [[PlayAudio alloc] init]; 
[thisPlayAudio playFile:(@"RockSnare")]; 
[thisPlayAudio release]; 
2

多分これは役立つだろう:あなたはおそらく、この欲しい

- (IBAction) playKick { 
    PlayAudio *thisPlayAudio= [[PlayAudio alloc] init]; 
    [thisPlayAudio playFile:(@"RockSnare")]; 
    [thisPlayAudio release]; 
} 

をこれは、オブジェクトの作成を終了し、thisPlayAudioに割り当て、そしてオーディオを果たしています。あなたが持っているものはthisPlayAudioをplayFile呼び出しの結果に設定します。

+0

お元気ですか、お返事ありがとうございました!私はそれを感謝します。申し訳ありませんが、質問を2回投稿しました。最初は適切に投稿されているかどうかはわかりませんでした。そしてAlmoに感謝!上記はうまくいった!私は歩く前に走ろうとしているかもしれません!最高のすべてを願っています。 Martin – Martin

+0

質問が他のものとマージされているように見えるので、チェックマーをクリックすることで最も役立つ回答を選択することができます。そして、次にあなたが助けを必要とするときにシステムがどのように機能するかを知っています。 :) – Almo

1

あなたがすぐに作成した後にオブジェクトを解放しようとしています。おそらく、あなたはまたplayFileメソッドで何か間違っています。また、1つのスコープでファイルを作成して削除すると、プレイヤーはファイルを再生しません。試してみてください:

PlayAudio *thisPlayAudio = nil; 
- (IBAction) playKick { 
    if (thisPlayAudio){ 
     [thisPlayAudio release]; thisPlayAudio = nil; 
    } 
    thisPlayAudio= [[PlayAudio alloc] init] autorelease]; 
    [thisPlayAudio playFile:(@"RockSnare")]; 
} 
+0

こんにちは、あなたの助けをありがとう!私はそれを今ソートしました! – Martin

関連する問題