0

MPMoviePlayerController でプロパティ controlStyle に MPMovieControlStyleNone を設定すると、参照カウントが 2 上がるのはなぜですか? また、 _player オブジェクトを解放するにはどうすればよいですか?

UIViewController を継承する Class を作成しました。

インスタンス変数

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 実装の 5 行目を削除します。player.controlStyle = MPMovieControlStyleNone;

結果1

[_player retainCount]=3

結果2

[_player retainCount]=1

実装 2 で _payer オブジェクトは [_player release] で解放できます。実装 1 では、retainCount は 3 です。[_player release] の実行後、retainCount は 2 です。_player オブジェクトは解放されません。keepCount が 2 増加するのはなぜですか? _player オブジェクトを解放するにはどうすればよいですか?

4

1 に答える 1

0

保持カウントは役に立ちません。呼ばないで。

特定の質問に答えるには、メモリ管理ルールに従って問題を修正します。

まず、makeMoviePlayer:メソッドは自動解放されたオブジェクトを返し、viewDidLoad はそれを保持する必要があります。必要がなくなったら解放する必要があります。

さらに良いことに、ARC をオンにします。

于 2012-06-08T03:32:37.780 に答える