在重新分配之前,我应该在分配给保留属性的自动释放对象上调用release吗?

时间:2013-10-18 01:52:46

标签: objective-c properties retain autorelease

仍然没有%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];
}

1 个答案:

答案 0 :(得分:2)

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

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