【问题标题】:Should I call release on an autorelease object assigned to a retained property before reassigning it?我应该在重新分配之前调用分配给保留属性的自动释放对象的释放吗?
【发布时间】:2013-10-18 01:52:46
【问题描述】:

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

【问题讨论】:

    标签: objective-c properties retain autorelease


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      相关资源
      最近更新 更多