0

如果我将 MPMovieControlStyleNone 设置为 MPMoviePlayerController 的属性 controlStyle,为什么引用计数会上升 2?另外,我怎样才能释放 _player 对象?

我创建了一个继承自 UIViewController 的类。

实例变量

NSString* _movieFilename;
MPMoviePlayerController* _player;

执行

- (MPMoviePlayerController*)makeMoviePlayer:(NSString*)res {
    NSURL* url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:res ofType:@""]];
    MPMoviePlayerController* player = [[MPMoviePlayerController alloc] initWithContentURL:url];
    if (url == nil) return nil;
    player.controlStyle = MPMovieControlStyleNone;
    return player;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor blackColor]];
    _player=[self makeMoviePlayer:_movieFilename];

    if(_player == nil) return;

    NSLog(@"[_player retainCount]=%d", [_player retainCount]);

}

实施1 如上所述的实施。实施 2 删除实施的第五行。player.controlStyle = MPMovieControlStyleNone;

结果 1

[_player retainCount]=3

结果 2

[_player retainCount]=1

在实现 2 _payer 对象可以在 [_player release] 中释放。在实现 1 中,retainCount 为 3。 [_player release] 执行后,retainCount 为 2。_player 对象不会被释放。为什么 retainCount 增加 2 ?如何释放 _player 对象?

4

1 回答 1

0

保留计数是无用的。不要叫它。

要回答您的具体问题,您可以通过遵循内存管理规则来解决问题。

首先,您的makeMoviePlayer:方法应该返回一个自动释放的对象,并且您的 viewDidLoad 应该保留它。当你不再需要它时,它应该被释放。

更好的是,打开 ARC。

于 2012-06-08T03:32:37.780 回答