为什么iOS6在viewdidload之前调用私有方法?

时间:2013-06-25 02:29:16

标签: ios viewdidload

我遇到了问题。

当我初始化Controller时,我使用了initwithnib:bundle:方法然后我认为这个控制器已经加载到内存中。所以我调用它的方法selectUnreadMessage来改变它的标题。但我发现在viewdidload之后调用selectUnreadMessage

有人可以告诉我为什么?感谢。

- (void)selectUnreadSegmentedHeaderButton {

    if ([YDNetworkingManager sharedNetworkingManager].badgeNumbers.count) {

        for (NSNumber *unreadMessagesCount in [YDNetworkingManager sharedNetworkingManager].badgeNumbers) {
            if (unreadMessagesCount.intValue > 0) {
                NSInteger index = [[YDNetworkingManager sharedNetworkingManager].badgeNumbers indexOfObject:unreadMessagesCount];
                self.segmentedHeader.selectedIndex = index;
                [self loadTableViewAtIndex:index];
                break;
            }
        }
    }
}

我的私有方法的代码在上面。此控制器具有SegmentedHeader属性,可在不同类型的消息之间切换。

此方法在使用此方法作为addSubView;

的Controller之后调用

2 个答案:

答案 0 :(得分:0)

当Controller的视图准备viewDidLoad进入另一个视图时,会调用

addSubView方法。添加Controller视图后,将调用viewWillAppearviewDidAppear。如果从超级视图中删除了Controller的视图,则会调用viewWillDisAppearviewDidDisAppear

再次添加Controller的视图,viewDidLoad NOT 被调用。其他方法的说法与我所说的相同。

这意味着当您初始化Controller时,不会立即调用viewDidLoad。稍后将调用此方法。它是延迟加载

希望它有用!

答案 1 :(得分:0)

ViewController初始化没有创建视图 - viewcontroller的视图是懒惰加载的 - 当它的视图实际上被添加到视图层次结构时。因此,当您访问viewcontroller的-viewDidLoad属性时会调用.view方法 - 因此,您可以考虑在init方法中初始化数据结构(获取数据,分配容器,设置默认值等)以及稍后,当调用-viewDidLoad时 - 将数据应用于您的视图/ UI。