在dealloc发布后第二次iPhone应用程序崩溃,错误访问

时间:2012-01-05 12:10:05

标签: iphone crash exc-bad-access

我正面临崩溃“Exc_Bad_Access”我正在编写以下代码。任何人如果回答它可能会非常有帮助谢谢。我正在尝试在横向视图中播放视频,而其他应用程序仍保持纵向方向。下面的工作非常好但是当我第二次打开它时第二次调用openMoviePlayer它会崩溃。我知道Exc_Bad_Access有时候是不可预测的或者指出原因,但是相信我这是非常小的代码并且它每次都在这里崩溃而其他代码很好我确定。 AND YES如果我从dealloc移除[播放器释放]它工作正常但我知道当时保留玩家的数量为1并且这是内存泄漏。

- (void)openMoviePlayer {

    VideoViewController *videoScreen = [VideoViewController new];

    UINavigationController *navContr = [[UINavigationController alloc] initWithRootViewController:videoScreen];

    navContr.navigationBar.tintColor = kNavbarColor;

    [self presentModalViewController:navContr animated:NO];

    [videoScreen release];

    [navContr release];

}

VideoVIewController.m

- (void)viewDidLoad {

    [super viewDidLoad];

    player = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];

    player.movieSourceType = MPMovieSourceTypeStreaming;

    player.controlStyle = MPMovieControlStyleDefault;

    [player.view setFrame:CGRectMake(0.0, 0.0, 480.0, 270.0)];
    [self.view addSubview:player.view];

    [player play];
}

- (void)dealloc {

    [player release];

    [super dealloc];

}

感谢您的帮助!!!

3 个答案:

答案 0 :(得分:2)

试试此代码

VideoViewController *videoScreen = [VideoViewController new];

    UINavigationController *navContr = [[UINavigationController alloc] initWithRootViewController:videoScreen];

    navContr.navigationBar.tintColor = kNavbarColor;

    [self presentModalViewController:navContr animated:NO];

    [navContr release];

 [videoScreen release];

答案 1 :(得分:0)

如果你已经将玩家声明为具有保留的属性,那么你需要这样写:

MPMoviePlayerController* tmp = [[MPMoviePlayerController alloc] 
                                 initWithContentURL:movieURL];
self.player = tmp;
[tmp release];
self.player.movieSourceType = MPMovieSourceTypeStreaming;

..

和dealloc:

self.player = nil;

答案 2 :(得分:0)

您的应用程序崩溃了,因为您尝试释放使用new创建的基础对象当前正在运行

  • new不支持自定义初始值设定项(如initWithString)

  • alloc-init比新

  • 更明确
  • new在autorelease中没有比alloc-init更好地处理,所以你释放它从内存中杀死的对象会导致应用程序崩溃

    VideoViewController *videoScreen = [[VideoViewController alloc] init];
    
    UINavigationController *navContr = [[UINavigationController alloc] initWithRootViewController:videoScreen];
    
    navContr.navigationBar.tintColor = kNavbarColor;
    
    [self presentModalViewController:navContr animated:NO];
    
    [videoScreen release];
    
    [navContr release];
    

    其余的代码都很好,因为我在我们的应用程序中使用了这个代码,它工作得很好,一切都很好。