针对从ios5/6 升级到ios7 的viewcontroller的 生命周期调整说明;
来源:互联网 发布:linux dd将img 编辑:程序博客网 时间:2024/05/21 11:23
若工程比较老,是ios5/6的工程,现在要升级,项目庞大, 在一个viewdidload 里面,写有庞大的 成员属性初始化,比如数组,视图初始加载,比如 addsuview等;
有在另外一个controller里面 跳转到本视图controller,用的是pushviewcontroller; 在push的代码之后,紧跟着的是本controller的 刷新UI的方法;
形如:
PromotionsContentViewController *viewcontroller = [[[PromotionsContentViewControlleralloc]init]autorelease];
[self.navigationControllerpushViewController:viewcontroller animated:YES];
[viewcontroller displayPromotionsObject:promotions];
在ios7 之前,即使不用xib,这样也是没什么问题的;
因为viewcontroller 的viewdidload 方法,会在push 之后,紧接着就会执行;但是ios7 不用xib的就不是这样。。viewdidload 大多数情况下,会在 displayPromotionsObject这句代码之后执行。。这样就会造成刷新UI的时候,成员属性或者视图view 并没有被初始化,造成push 进来一个空白的或者是一个没有刷新的 默认的界面,因为viewdidload 在display 之后调用............
notes: 使用xib的controlller 不存在这个问题;;
如果你的viewdidload 代码太过复杂,逻辑牵扯太多 ;;这里提供一个偷懒 但是稍微有些不安全的方法;
1/ 添加形如以下代码
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[self viewDidLoad]; // 这句是关键,强制显示调用 ,第一次自定义调用
}
return self;
}
2/ 在viewdidvoad 头部,添加以下代码-(void)viewdidload{
if (self.view.subviews.count>=1) {
return; // 规避第二次的系统调用
}
[super viewdidload]; // 这句代码, 也可以注释掉}
- 针对从ios5/6 升级到ios7 的viewcontroller的 生命周期调整说明;
- echarts2升级到echarts3需要调整的简单说明
- ViewController的生命周期
- 再谈ViewController的生命周期
- ViewController的生命周期
- ViewController的生命周期
- ViewController的生命周期
- ViewController的生命周期
- ViewController的生命周期
- ios--ViewController的生命周期
- ViewController的生命周期
- ViewController 的生命周期分析
- ios ViewController的生命周期
- ViewController的生命周期
- viewController的生命周期
- ViewController的生命周期
- ViewController的生命周期
- ViewController的生命周期
- 无线AP与无线路由器的区别
- spring 配置异步要点(转载)
- 我回来了
- hadoop集群搭建
- 如何区分一个程序员是“老手“还是“新手“?
- 针对从ios5/6 升级到ios7 的viewcontroller的 生命周期调整说明;
- 匹配URL或者网址
- NYOJ 6 喷水装置(一)
- 视频内容是如何在互联网进行分发的
- UVALive 3720 Highways(组合计数、递推)
- 研发和开发---谈谈我经历的一些公司面试
- MySQL数据库MyISAM和InnoDB 比较
- 基于移动平台的多媒体框架——移植SDL到Android
- web缓存 Squid工作原理