presentViewController 执行后,static变量值不变 bFlag 肯定是YES,你不又重新赋值了吗static BOOL bFlag = NO;bFlag = YES; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 static BOOL bFlag = NO; //只在构造时执行一次 bFlag = YES; //总是会执行 不是 不是 当第二次 presentViewController 的时候 执行到 static BOOL bFlag = NO; 这一句的时候 就是YES ,bFlag=YES还没执行呢。 不是 不是 当第二次 presentViewController 的时候 执行到 static BOOL bFlag = NO; 这一句的时候 就是YES ,bFlag=YES还没执行呢。 不是 不是 当第二次 presentViewController 的时候 执行到 static BOOL bFlag = NO; 这一句的时候 就是YES ,bFlag=YES还没执行呢。那你问题主要就是对static理解的问题了,你把static用在方法作用域里,它相当于就是一个静态的局部变量:1.静态局部变量在程序开始执行的时候就始终存在,它的生命周期与整个程序一致。2.静态局部变量的生命周期虽然为整个程序的生命周期,但是其作用域范围仍与自动临时变量相同。 主要是static 修饰符在作怪。楼上已经对static解释的很清楚了。如果只是让bFlag作为一个局部变量来使用的话,就把前面的static修饰符去掉吧。 不是 不是 当第二次 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里面的静态变量还有作用呢?注意:是第二次调用 “代码片段一” 还有 一个 是第二次执行 btnBack 但是只执行到 static BOOL bFlag=NO; 这里 就显示 bFlag为YES,后面那句话还没执行呢 静态变量会一直存在,不会重复分配,你第二次进去时的bFlag和第一次是同一个 我X 看来我标书的不清楚啊 重新来过---------------------------------------------------------------------------------------------------------------------------------------------------------------------1. MainViewController2. 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->btnBackshow->btnBack这里注意了 是两次啊 两次然后第二次出发btnBack的时候 ,在"行数一"这里 bFlag 居然是YES疑问在哪里?以为在于,第二次show的时候 FirstViewController * vc 是重新申请过的啊,跟第一次的 FirstViewController * vc 根本就没关系啊,为什么bFlag会是上一次遗留下来的值呢? bFlag和FirstViewController的生命周期不一样的,FirstViewController虽然被销毁并释放了,但bFlag是被分配在全局静态区的,只有程序被终结时才会被释放 bFlag和FirstViewController的生命周期不一样的,FirstViewController虽然被销毁并释放了,但bFlag是被分配在全局静态区的,只有程序被终结时才会被释放是这样? 我晕倒,我怎么记得 不是这样啊 【求助】update方法不能正常调用 这几个功能点大家有合适的开发思路吗? 采用HTML5开发是否意味着不必通过App Store的审核? 新手提问:断点调试如何进入函数内部调试? AT指令操作3G实现网络传输的问题~急 EasyGet 下载SDK 关键API展示 关于ios企业账号安装权限的问题,求大神 OS下如何实现网页上调用系统短信界面发送短信的功能(需要传递端口号和短信内容) iOS WebView重定向问题 求大神帮忙解决图片上传问题 swift怎么取得UIApplication的对象实例 android开发和IOS开发的区别
不是 不是 当第二次 presentViewController 的时候 执行到 static BOOL bFlag = NO; 这一句的时候 就是YES ,bFlag=YES还没执行呢。
不是 不是 当第二次 presentViewController 的时候 执行到 static BOOL bFlag = NO; 这一句的时候 就是YES ,bFlag=YES还没执行呢。
不是 不是 当第二次 presentViewController 的时候 执行到 static BOOL bFlag = NO; 这一句的时候 就是YES ,bFlag=YES还没执行呢。
那你问题主要就是对static理解的问题了,你把static用在方法作用域里,它相当于就是一个静态的局部变量:
1.静态局部变量在程序开始执行的时候就始终存在,它的生命周期与整个程序一致。
2.静态局部变量的生命周期虽然为整个程序的生命周期,但是其作用域范围仍与自动临时变量相同。
不是 不是 当第二次 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里面的静态变量还有作用呢?
注意:是第二次调用 “代码片段一”
重新来过---------------------------------------------------------------------------------------------------------------------------------------------------------------------
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会是上一次遗留下来的值呢?