2013-10-18 50 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

相關問題