4

在我的项目中,我手动创建视图而不使用情节提要。当我点击图像时,我尝试播放视频。它工作正常。但是每次当我检查它时点击图像时都会显示内存泄漏,我已经搜索了很多并应用了但没有用。在我的 Appdelegate.h 文件中:

@property (strong, nonatomic) MPMoviePlayerController *theMoviePlayer;
@property (strong, nonatomic) UIImageView *image1;

在 .m 文件中:

-(void) startPage{
.....
_image1 = [[UIImageView alloc] initWithFrame:CGRectMake((self.window.frame.size.width/2)-25, 40, 50, 50)];
[_image1 setUserInteractionEnabled:YES];
_image1.image = [UIImage imageNamed:@"image_2.jpg"];
_tapImage1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(image1Tapped:)];
[_image1 addGestureRecognizer:_tapImage1];
.....}

在 imageTapped() 中,

-(void) image1Tapped:(UITapGestureRecognizer *)sender
{
  .....

 [_image1 removeFromSuperview];

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


    [_theMoviePlayer setControlStyle:MPMovieControlStyleFullscreen];

    [_theMoviePlayer.view setFrame:CGRectMake(0,-55, self.window.frame.size.width, self.window.frame.size.height)];



    [_theMoviePlayer setScalingMode:MPMovieScalingModeAspectFill];

    UIWindow *backgroundWindow = [[UIApplication sharedApplication] keyWindow];

    [backgroundWindow addSubview:_theMoviePlayer.view];

    [_theMoviePlayer.view bringSubviewToFront:backgroundWindow];
[_theMoviePlayer play];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinished:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification object:_theMoviePlayer];
...}

每次进入 imageTapped: 方法时都会发生内存泄漏。任何帮助将不胜感激。

4

3 回答 3

1
@property (strong, nonatomic) MPMoviePlayerController *theMoviePlayer;
@property (weak, nonatomic) UIImageView *image1;

另一种想法是您theMoviePlayer的未删除,请尝试使其视图透明,以查看是否已经在新视图后面工作

于 2013-10-22T11:10:20.813 回答
1

我正在努力帮助你。

在 -(void) startPage 你分配 _image1 对象

并且您正在 使用[_image1 removeFromSuperview];删除方法-(void) image1Tapped:(UITapGestureRecognizer*)sender中的对象;方法

意味着现在 _image1 为 nil 并且当 -(void) image1Tapped:(UITapGestureRecognizer *)sender方法调用时,当您获取 _image1 对象时 _image1 已经为零 ,因此它给出内存泄漏警告。

这个解决方案是:

1. **显示/隐藏 _image1 对象**或每次您需要在此方法中进行正确分配和删除 image1 对象 -(void) image1Tapped:(UITapGestureRecognizer *)sender,根据您的要求。

首先尝试此解决方案,将删除内存泄漏警告。

编译器会提前检查所有步骤,以便将其识别为警告。

在某些情况下,如果您的逻辑错误,那么编译器会通知我们错误的逻辑。

如果您想检查单击内存警告按钮的蓝色箭头,它将解释您的逻辑或警告假设。

于 2013-10-22T12:07:27.950 回答
1

我发现了问题,它与设备 iPad(iOS 版本 5)有关。当我使用 iPad4(iOS 版本 7)检查时,它显示没有泄漏。

于 2013-10-23T12:56:41.200 回答