2013-10-18 51 views
1

上仍然没有%100明确此。当AVPlayer连接中断时,可靠地重新启动它的唯一方法是重新创建对象。由于它们是用便捷方法创建的,所以它们是自动释放的,但属性设置者应该保留它们。 我应该在重新分配它们之前释放它们吗?当我这样做时,我得到了随机例外。没有释放它不会崩溃,但我很确定这是一个泄漏?我应该在分配给保留属性的autorelease对象上调用释放,然后重新分配它吗?

@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]; 
} 

回答

2

您的设置员应该在分配和保留新值之前释放旧值。请参阅this answer了解如何合成MRC。如果你不提供你自己的setter,这不应该泄漏内存。

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

完美。这清除了它。 – TijuanaKez

相关问题