эффективный способ создания мультипросмотрового приложения?

Приложение, которое я делаю, использует несколько представлений. например, представление отказа от ответственности, представление для отображения ответа и т. д. До сих пор это код, который я использовал для переключения с одного представления на другое.

-(IBAction)swichtogain:(id)sender{
    gainview *second = [[gainview alloc]initWithNibName:nil bundle:nil];
    [self presentModalViewController:second animated:YES];
    [second release];
}

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

  -(IBAction)swichtoview1:(id)sender{
        view1 *view = [[gainview alloc]initWithNibName:nil bundle:nil];
        [self presentModalViewController:view animated:YES];
        [view release];
    }

и когда в представлении1, если пользователь нажимает кнопку «Назад», выполняется следующий код

  -(IBAction)swichtomainview:(id)sender{

       mainview *view = [[gainview alloc]initWithNibName:nil bundle:nil];
        [self presentModalViewController:view animated:YES];
        [view release];
    }

Я ничего не редактировал в файлах appdelegate, и это приложение на основе представления. Заставляет ли этот метод использовать больше памяти? Во время теста монитора активности с использованием инструментов я заметил, что использование памяти увеличивается каждый раз, когда я перехожу из главного меню в другое представление и возвращаюсь в главное меню! Есть ли лучший способ, чем этот? Также одним из представлений является калькулятор, поэтому, когда пользователь нажимает кнопку расчета, он переключается на следующее представление, изменяя текстовое поле на ответ, ниже приведен код для этого!

-(IBAction)calculate{
    MyClass *setnum = [[MyClass alloc]init];
    setnum.grade_num = grade;
    setnum.stage_num = stage;
    setnum.ex_lym = ex_ly;
    setnum.pos_lym = pos_ly;
    setnum.er_num = er;
    setnum.noderatio = pos_ly/ex_ly;



    if(text1.text.length <=0 ||text2.text.length <=0||text3.text.length<=0||text4.text.length<=0||text5.text.length <=0){

        UIActionSheet *action = [[UIActionSheet alloc]initWithTitle:@"Incomplete Values" delegate:self cancelButtonTitle:@"Ok" destructiveButtonTitle:nil otherButtonTitles:nil];    
        [action showInView:self.view];
        [action release];

    }else{
        answer *ans =[[answer alloc]initWithNibName:nil bundle:nil];
        [self presentModalViewController:ans animated:YES];

      float i =   calc_gain(setnum.grade_num, setnum.noderatio, setnum.stage_num, setnum.er_num);  
        NSString *result = [NSString stringWithFormat:@"%f",i];

        ans.answer1.text = result;
        ans.bar.hidden = NO;



        [ans release];
    }
    [setnum release];

}

person cyberbemon    schedule 31.08.2011    source источник


Ответы (2)


Вам следует рассмотреть возможность использования одного из предоставленных контроллеров представления контейнера (UITabBarController, UINavigationBarController или UISplitViewController на iPad и т. д.).

То, как вы используете presentModalViewController, скорее всего, неправильно. Во-первых, вызов presentModalViewController сохранит ваши представления. Следовательно, продолжая выделять новые контроллеры и отображать их представления через presentModalView, вы увеличиваете объем используемой памяти с каждым шагом навигации.

Как правило, контроллер представления, который показывает другой модальный контроллер представления, также отвечает за его повторное закрытие. Таким образом, способ отклонить контроллер модального представления состоит в том, чтобы позволить представленному контроллеру информировать своего родителя через делегирование и попросить родителя отклонить (часто при нажатии кнопки «Готово»).

Я даже не уверен, является ли стекирование modalViewControllers поддерживаемым сценарием, но, по крайней мере, не нашел ничего другого, указанного в документация.

person Community    schedule 31.08.2011
comment
эй! неудивительно, почему он использовал так много памяти. Я гуглил для учебника, используя UIviewcontrollers, не могу найти хороший, который можно использовать с Xcode 4, у кого-нибудь есть ссылка на видео или учебник? - person cyberbemon; 31.08.2011
comment
Как всегда, хорошей отправной точкой является документация: developer.apple.com/library/ios/#featuredarticles/ - person ; 31.08.2011
comment
Поддерживается наложение контроллеров модального представления. - person Sven; 01.09.2011

Вчера спросил здесь:

Переключение представлений для приложения iphone - это правильный путь?

Я думаю, что еще один хороший способ сделать это — добавить univanigationcontroller:

[self.navigationController pushViewController:second animated:YES];
person TommyG    schedule 31.08.2011