针对从ios5/6 升级到ios7 的viewcontroller的 生命周期调整说明;

若工程比较老,是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]; // 这句代码, 也可以注释掉

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值