1

これについては、まだ %100 クリアしていません。AVPlayer 接続が切断された場合、確実に再起動する唯一の方法は、オブジェクトを再作成することです。それらは便利なメソッドで作成されるため、自動解放されますが、プロパティ セッターはそれらを保持する必要があります。それらを再割り当てする前に解放する必要がありますか? 私がやったとき、ランダムな例外が発生していました。リリースがなければクラッシュしませんが、それはリークだと確信しています???

@interface
@property (retain, nonatomic) AVPlayerItem *streamItem;
@property (retain, nonatomic) AVPlayer *streamPlayer;

@implementation

- (void)restartStream
{
    //[self.streamItem release]; // ???????
    //[self.streamPlayer release]; // ???????
    self.streamItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://someStream.com"]];
    self.streamPlayer = [AVPlayer playerWithPlayerItem:self.streamItem];
}
4

1 に答える 1

2

セッターは、新しい値を割り当てて保持する前に、古い値を解放する必要があります。合成された MRC の実装方法については、この回答を参照してください。独自のセッターを提供していない場合、これによってメモリ リークが発生することはありません。

- (void)restartStream
{
    self.streamItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://someStream.com"]];
    self.streamPlayer = [AVPlayer playerWithPlayerItem:self.streamItem];
}
于 2013-10-18T02:08:31.220 に答える