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

您的 setter 应在分配和保留新值之前释放旧值。有关如何实现合成 MRC 的信息,请参阅此答案。如果您没有提供自己的设置器,则不应泄漏内存。

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