好的,這對於那裏的專業人員來說應該是一件容易的事情(免責聲明,我是Obj-C中的noob,主要用於C#)。我有一個UIViewController子類;它的一個屬性是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 2012-02-13 00:03:41