これは賛否両論のための簡単なものでなければなりません(免責事項、私はObj-Cのようなものですが、主にC#で使用しています)。私はUIViewControllerサブクラスを持っています。そのプロパティの1つがAVAudioPlayerオブジェクトです。このコードを書くとき:なぜオブジェクトを割り当てて、インスタンス変数をObj-Cで設定する必要がありますか?
NSString *path = [[NSBundle mainBundle] pathForResource:@"example" ofType:@"caf"];
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
[player initWithContentsOfURL:url error:NULL];
[url release];
[player setDelegate:self];
[player prepareToPlay];
[player play];
何も起こりません。
NSString *path = [[NSBundle mainBundle] pathForResource:@"example" ofType:@"caf"];
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
AVAudioPlayer *ap = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
self.player = ap;
[ap release];
[url release];
[player setDelegate:self];
[player prepareToPlay];
[player play];
...すべてが美しく動作します:明確にそれを行うための正しい方法である
私はこれを行います、。
なぜオブジェクトを割り当ててからプロパティを設定する必要がありますか?これはあまりにも一般的な質問である場合はお詫び申し上げます。
可能であれば、ARCを使用すると、保持/解放または自動解放のステートメントはありません。コンパイラが行うことができるいくつかの最適化もあります。また、便利なメソッドがあります: 'NSURL * url = [NSURL URLWithString:path];'これはあなたの人生を楽にすることができます。 – zaph