Вопрос Памяти


Может это часть вид контроллера подкласс быть проверены на наличие утечек памяти. Я не настолько хорош в поиске утечки. Мне нужен этот класс, чтобы быть в состоянии быть загруженными много времени без его сбой из-за утечки памяти. Эндшпиль вызывается каждый раз, когда он должен вернуться в Главное меню. Я хочу, чтобы иметь возможность вернуться в Главное меню, не оставляя следа в памяти.

UIImageView* questionImage;
UIImageView* questionImage2;

UIButton* questionButton1;
UIButton* questionButton2;
UIButton* questionButton3;
UIButton* questionButton4;
UIButton* questionButton5;
UIButton* questionButton6;

UIButton* achievementbutton;
UIButton* endbutton;

UILabel* questionText;
UILabel* ButtonLabel;

- (void)viewDidLoad 
{
    [super viewDidLoad];
    [self StartTimer];

    TotalSeconds = 0;
    GameCenterTotalSeconds = 0;
    timeSec = 0;
    timeMin = 0;

    Background = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 480, 320)] ;
    Background.image = [UIImage imageWithContentsOfFile:[ [ NSBundle mainBundle] pathForResource:@"Background" ofType:@"png"]];
    [self.view addSubview:Background];

    timeLabel.textColor = [UIColor redColor];
    [self.view addSubview:timeLabel];

    NumberLabel = [[UIImageView alloc] initWithFrame:CGRectMake(0, -4, 60, 70)] ;
    NumberLabel.image = [UIImage imageWithContentsOfFile:[[ NSBundle mainBundle] pathForResource:@"Number" ofType:@"png"]];
    [self.view addSubview:NumberLabel];

    QuestionNumber = [[UILabel alloc] initWithFrame:CGRectMake(23, 17, 20, 20)] ;
    QuestionNumber.text = @"1";
    QuestionNumber.textColor = [UIColor redColor];
    QuestionNumber.backgroundColor = [UIColor clearColor];
    [QuestionNumber setFont:[UIFont fontWithName:@"Marker Felt" size:30]];
    [self.view addSubview:QuestionNumber];

    numberLives = 1;

    appDelegate = (OppositeMoronTestAppDelegate *)[[UIApplication sharedApplication]delegate];

    musicButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain] ;
    musicButton.frame = CGRectMake(5, 283, 35, 35);
    musicButton.backgroundColor = [UIColor clearColor];

    if (appDelegate.shouldPlayMusic == YES) {

        UIImage *Image = [UIImage imageWithContentsOfFile:[[ NSBundle mainBundle] pathForResource:@"MusicOn" ofType:@"png"]];
        [musicButton setBackgroundImage:Image forState:UIControlStateNormal];
        [musicButton addTarget:self action:@selector(TurnMusicOff) forControlEvents:UIControlEventTouchUpInside];
    } else {
        UIImage *Image = [UIImage imageWithContentsOfFile:[[ NSBundle mainBundle] pathForResource:@"MusicOff" ofType:@"png"]];
        [musicButton setBackgroundImage:Image forState:UIControlStateNormal];
        [musicButton addTarget:self action:@selector(TurnMusicOn) forControlEvents:UIControlEventTouchUpInside];
    }

    [self.view addSubview:musicButton];
    [self showQuestion1];
}

- (void) showQuestion1 
{
    questionImage = [[UIImageView alloc] initWithFrame:CGRectMake(15, 50, 430, 270)] ;
    questionImage.image = [UIImage imageWithContentsOfFile:[[ NSBundle mainBundle] pathForResource:@"Q1new" ofType:@"png"]];
    [self.view addSubview:questionImage];

    questionButton5 = [UIButton buttonWithType:UIButtonTypeCustom];
    [questionButton5 addTarget:self action:@selector(showQuestion2Part1)forControlEvents:UIControlEventTouchDown];
    questionButton5.frame = CGRectMake(109, 75, 90, 65);
    [self.view addSubview:questionButton5];

    questionButton1 = [UIButton buttonWithType:UIButtonTypeCustom];
    [questionButton1 addTarget:self action:@selector(wronganswer)forControlEvents:UIControlEventTouchDown];
    questionButton1.frame = CGRectMake(230, 50, 120, 90);
    [self.view addSubview:questionButton1];

    questionButton2 = [UIButton buttonWithType:UIButtonTypeCustom];
    [questionButton2 addTarget:self action:@selector(wronganswer)forControlEvents:UIControlEventTouchDown];
    questionButton2.frame = CGRectMake(300, 144, 100, 90);
    [self.view addSubview:questionButton2];

    questionButton3 = [UIButton buttonWithType:UIButtonTypeCustom];
    [questionButton3 addTarget:self action:@selector(wronganswer)forControlEvents:UIControlEventTouchDown];
    questionButton3.frame = CGRectMake(203, 187, 95, 90);
    [self.view addSubview:questionButton3];

    questionButton4 = [UIButton buttonWithType:UIButtonTypeCustom];
    [questionButton4 addTarget:self action:@selector(wronganswer)forControlEvents:UIControlEventTouchDown];
    questionButton4.frame = CGRectMake(67, 140, 120, 95);
    [self.view addSubview:questionButton4];

    questionText = [[UILabel alloc] initWithFrame:CGRectMake(80, 20, 300, 30)] ;
    questionText.text = @"Press the Addition Sign";
    questionText.textColor = [UIColor blackColor];
    questionText.backgroundColor = [UIColor clearColor];
    [questionText setFont:[UIFont fontWithName:@"Marker Felt" size:30]];
    [self.view addSubview:questionText];
}
- (void) endgame 
{
    [WrongBackground release];
    [gameOver release];
    [wrongLivesLeft release];
    [questionImage release];
    [questionText release];
    [Background release];
    [NumberLabel release];
    [musicButton release];
    [questionImage release];
    [questionText release];

    [self.view removeFromSuperview];
}


Комментарии
1 ответ

Существует несколько мнений, что ты выделению и установке как подпанели в -метод viewDidLoad. Среди них NumberLabel, фон, и QuestionNumber. (Кстати, было бы немного проще выполнять ваш код, если вы застряли в Objective-C и конвенций именования и начать переменных со строчной буквы.) Эти, как представляется, переменные экземпляра, но вы не указали в объявлении класса, поэтому трудно быть уверенным. В любом случае, если вам не надо вновь обратиться к этим видом после того, как их добавили как на главный экран, было бы лучше, чтобы сделать их локальных переменных, а Ивар и освободите их прямо сейчас. (Вид сохранит их, как только они были добавлены.) Когда представление выгружается, все эти подпанелей будет выпущен.

QuestionNumber не вышел в код, что вы указали ... это может быть утечка.

Непонятно, где timelabel происходит от Или, если он на самом деле указывает на вид.

Вы выпускаете WrongBackground, но это не созданные в -метод viewDidLoad, так что трудно знать, если это правильно или нет.

Есть несколько переменных, таких как questionButton1 и друзей, которые выглядят как файл-область глобальных переменных, а не переменные экземпляра, но нет никаких указаний, почему. Не было смысла делать их Иварс?

2
ответ дан 11 августа 2011 в 07:08 Источник Поделиться