Как освободить viewcontroller при использовании addSubview? - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть следующий код:

+(void) addHeader:(UIViewController*) hostViewController requiresBackBtn:(BOOL)BooleanValue
{       
    ApplicationHeader *appHeader = [[ApplicationHeader alloc] initWithNibName:@"ApplicationHeader" bundle:nil];
    appHeader.hostViewController = hostViewController;
    [appHeader.view setFrame:CGRectZero];
    [hostViewController.view addSubview:appHeader.view];

    if (BooleanValue) {
        [appHeader.view setFrame:CGRectMake(0, 0, 320, 97)];
    }
    else {
        [appHeader.backBtn setHidden:TRUE]; 
        [appHeader.view setFrame:CGRectMake(0, 0, 320, 74)];
    }
//    [appHeader release]; // This call tends to app Crash!!!!!
}

Если я вызываю release для appHeader, то приложение вылетает, я нажимаю кнопку, найденную в appHeader !!А если нет, то это утечка памяти.

Что теперь делать?(

Ответы [ 2 ]

0 голосов
/ 15 апреля 2011

Добавление представления другого контроллера в ваш viewController противоречит политике Apple «один контроллер на экран». Он обязательно выдаст предупреждения памяти уровня 1 и 2, и приложение будет аварийно завершать работу.

0 голосов
/ 15 апреля 2011

Я не знаю, что такое ApplicationHeader, но я знаю, что у вас есть сохраненное представление из [hostViewController.view addSubview:appHeader.view]; Будет ли ApplicationHeader лучше как подкласс UIView?Без дополнительной информации я не уверен, что предложить в качестве решения, но я думаю, что вам нужно переосмыслить то, что вы пытаетесь достичь.

...