2011-11-14 16 views
1

私は曲を演奏する簡単なプログラムを持っています。それは継承されたawakeFromNibメソッドにあります。だから..NSSoundは動作していますが、初期化も割り当てもしていません。

-(void)awakeFromNib { 
NSSound *song = [NSSound soundNamed:@"MyTune.mp3"]; 
[song play]; 
} 

私の質問は、なぜこれが機能するのかです。私はあまりにも文字列で動作するようです

NSSound *song = [[NSSound alloc]init]; 
song = [NSSound soundNamed:@"MyTune.mp3"]; 
[song play]; 
} 

これを実行する必要はありませんどのように来る..私はNSTextView変数が設定していると私は、次の

-(void)awakeFromNib { 
NSString *str = [NSString stringWithFormat:@"Hello there!"]; 
[myTextVariable insertText:str]; 
} 

なぜ」didnのを行うことができます私はオブジェクトを割り当てて初期化する必要があります。私は失われています.. 助けてください。

+0

誰でも?私はちょうどこれを理解するのに苦労している。 – Heartbound07

答えて

1

多くのAppleクラスにはヘルパー関数があり、ヘルパー関数の中でallocとinitを行うクラスレベルで宣言されています。彼らはすぐに使えるオブジェクトを返します。 yuがメソッドのドキュメントを参照するかどうかを知ることができます。 "NSSoundインスタンスを指定された名前に関連付けて返します。"

あなたの最初の例は、したがって、良いコードです:あなたがALLOC、その後[NSSound soundNamed:@"MyTune.mp3"]によって返された新しいオブジェクトを使ってポインタを上書きするので

-(void)awakeFromNib { 
NSSound *song = [NSSound soundNamed:@"MyTune.mp3"]; 
[song play]; 
} 

あなたの第二の例は、メモリリーク:

-(void)awakeFromNib { 

    // Create an NSSound object in memory and store the address in song. 
    NSSound *song = [[NSSound alloc]init]; 

    // If you don't want a memory leak this is your last chance to [song release] 

    // Create a NSSound object using a helper function and place its address 
    // in song, over writing the previous address. 
    song = [NSSound soundNamed:@"MyTune.mp3"]; 

    // We now lost track of the first NSSound object and can't release it because 
    // we overwrote the address. 

    [song play]; 
    } 

the documentationからは、このメソッドはallocinitを内部に入れてインスタンスを返します:

をsoundNamed:

指定された名前に関連付けられているNSSoundインスタンスを返します

+(ID)がsoundNamed:(NSStringの*)音声データを特定 名前soundName

パラメータ

をsoundName。 soundNameで識別されるサウンドデータで初期化さ

戻り値

NSSoundインスタンス。

+0

私の2番目の例では、そう言えば、私は含めます [曲のリリース]; 同じことでしょうか? – Heartbound07

+0

割り当てられていないので解放しません。ヘルパー関数を使うと、Appleのコードがあなたのためにリリースを制御します。これは、*割り当てられたためです。 –

+0

私はあなたの意味を理解していないと思う。 2番目の例で2行目と3行目の間にリリースを挿入することを尋ねる場合は、yesを入力します。機能的には最初の例と同じですが、CPUサイクルとコーディングの無駄です。 –

関連する問題