制作多视图应用的有效方法?

时间:2011-08-31 16:48:42

标签: iphone objective-c ios ios4 multiview

我正在制作的应用程序使用多个视图。例如免责声明视图,显示答案等的视图等等。到目前为止,这是我用来从一个视图切换到另一个视图的代码

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

我在教程中发现了这个方法,我想知道,这是最好的方法吗?我使用相同的代码将n从一个视图切换回另一个视图,例如。

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

并且当在view1中时,如果用户点击后退按钮,则执行以下代码

  -(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];

}

2 个答案:

答案 0 :(得分:1)

您应该考虑使用其中一个提供的容器视图控制器(iPad上的UITabBarController,UINavigationBarController或UISplitViewController等)。

使用presentModalViewController的方式很可能是错误的方式。首先,调用presentModalViewController将保留您的视图。因此,通过presentModalView保持分配新控制器并显示其视图会增加每个导航步骤的内存占用量。

通常,显示另一个模态视图控制器的视图控制器也负责再次解除它。因此,解雇模态视图控制器的方法是让所呈现的控制器通过委托通知其父级,并要求父级解雇(通常点击“完成”按钮)。

我甚至不确定堆叠modalViewControllers是否是受支持的方案,但至少在documentation中没有找到任何其他说明。

答案 1 :(得分:0)

昨天在这里问:

Switching views for iphone application - is this the right way?

我认为另一个好办法是做到这一点并添加一个univanigationcontroller:

[self.navigationController pushViewController:second animated:YES];