bFlag 肯定是YES,你不又重新赋值了吗static BOOL bFlag = NO;
bFlag = YES;

解决方案 »

  1.   

        static BOOL bFlag = NO;   //只在构造时执行一次    bFlag = YES;  //总是会执行
      

  2.   


    不是 不是   当第二次 presentViewController 的时候   执行到 static BOOL bFlag = NO; 这一句的时候  就是YES  ,bFlag=YES还没执行呢。
      

  3.   


    不是 不是   当第二次 presentViewController 的时候   执行到 static BOOL bFlag = NO; 这一句的时候  就是YES  ,bFlag=YES还没执行呢。
      

  4.   


    不是 不是   当第二次 presentViewController 的时候   执行到 static BOOL bFlag = NO; 这一句的时候  就是YES  ,bFlag=YES还没执行呢。
    那你问题主要就是对static理解的问题了,你把static用在方法作用域里,它相当于就是一个静态的局部变量:
    1.静态局部变量在程序开始执行的时候就始终存在,它的生命周期与整个程序一致。
    2.静态局部变量的生命周期虽然为整个程序的生命周期,但是其作用域范围仍与自动临时变量相同。
      

  5.   

    主要是static 修饰符在作怪。楼上已经对static解释的很清楚了。如果只是让bFlag作为一个局部变量来使用的话,就把前面的static修饰符去掉吧。
      

  6.   


    不是 不是   当第二次 presentViewController 的时候   执行到 static BOOL bFlag = NO; 这一句的时候  就是YES  ,bFlag=YES还没执行呢。
    那你问题主要就是对static理解的问题了,你把static用在方法作用域里,它相当于就是一个静态的局部变量:
    1.静态局部变量在程序开始执行的时候就始终存在,它的生命周期与整个程序一致。
    2.静态局部变量的生命周期虽然为整个程序的生命周期,但是其作用域范围仍与自动临时变量相同。局部变量的作用于我知道  
    问题是 
    “代码片段一”
    {
                FirstViewController * vc = [[FirstViewController alloc]initWithNibName:nil bundle:nil];
                
                [self presentViewController:vc animated:YES completion:^(void){
                    
                }];
                
                vc = nil;
    }
    这个是第二次调用啊  也就是  第一次的vc 跟第二次的vc没有关系的吧?为什么在第二次的 FirstViewController被调用的时候,第一次FirstViewController里面的静态变量还有作用呢?
    注意:是第二次调用 “代码片段一”
      

  7.   

    还有  一个  是第二次执行  btnBack  但是只执行到  static BOOL bFlag=NO; 这里     就显示  bFlag为YES,后面那句话还没执行呢
      

  8.   

    静态变量会一直存在,不会重复分配,你第二次进去时的bFlag和第一次是同一个
      

  9.   

    我X  看来我标书的不清楚啊    
    重新来过---------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1. MainViewController
    2. FirstViewController“代码片段一”
    在MainViewController 里面
    -(void)show
    {
                FirstViewController * vc = [[FirstViewController alloc]initWithNibName:nil bundle:nil];
                
                [self presentViewController:vc animated:YES completion:^(void){
                    
                }];
                
                vc = nil;
    }代码片段二
    在FirstViewController 里面
    -(void)btnBack
    {
        static BOOL bFlag = NO;  // 行数一    
      这里省略100行代码    bFlag = YES;   [self dismissViewControllerAnimated:YES completion:nil];
    }//
    我的操作步骤是
    show->btnBack
    show->btnBack这里注意了  是两次啊 两次
    然后第二次出发btnBack的时候 ,在"行数一"这里  bFlag 居然是YES疑问在哪里?以为在于,第二次show的时候   FirstViewController * vc  是重新申请过的啊,跟第一次的 FirstViewController * vc 根本就没关系啊,为什么bFlag会是上一次遗留下来的值呢?
      

  10.   

     bFlag和FirstViewController的生命周期不一样的,FirstViewController虽然被销毁并释放了,但bFlag是被分配在全局静态区的,只有程序被终结时才会被释放
      

  11.   

     bFlag和FirstViewController的生命周期不一样的,FirstViewController虽然被销毁并释放了,但bFlag是被分配在全局静态区的,只有程序被终结时才会被释放是这样?   我晕倒,我怎么记得 不是这样啊