为啥在使用情节提要时反复调用 AwakeFromNib?

Posted

技术标签:

【中文标题】为啥在使用情节提要时反复调用 AwakeFromNib?【英文标题】:Why is AwakeFromNib getting called repeatedly when using storyboards?为什么在使用情节提要时反复调用 AwakeFromNib? 【发布时间】:2012-05-19 23:50:13 【问题描述】:

我有一个故事板应用程序。当第一个视图在启动时加载时,我有这段代码来实例化我的主后台线程,一切正常。

    public override void AwakeFromNib()
    
        base.AwakeFromNib();
        // Perform one-time initialization in this function

        // Create and start the main worker thread
        MainBackgroundThread = new Thread(new ThreadStart(MainLoop.RunWorker));
        MainBackgroundThread.Start();
    

但是,当用户转到不同的视图然后通过 segue 返回到第一个视图时,会再次调用 AwakeFromNib()。我以为它只应该被调用一次......我在哪里启动我的主后台线程,所以它只启动一次?

【问题讨论】:

【参考方案1】:

AwakeFromNib 将在每次从情节提要/segue 加载该视图的新实例时被调用。如果您在情节提要中继续,您应该期望每次都调用AwakeFromNib,因为您实际上是从 nib 对象创建视图的新实例。如果你想启动一个后台线程,你可以试试这样的:

public override void AwakeFromNib()

    static NSThread * thread;

    base.AwakeFromNib();
    // Perform one-time initialization in this function

    // Create and start the main worker thread
    if(!thread)
     
         thread = new Thread(new ThreadStart(MainLoop.RunWorker));
    

    MainBackgroundThread = thread;
    MainBackgroundThread.Start();

【讨论】:

以上是关于为啥在使用情节提要时反复调用 AwakeFromNib?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 XCode 4 在使用情节提要时不创建 XIB 文件?

当我使用自动布局移动视图时,为啥 XCode 5 没有在情节提要中添加约束

为啥带有约束的情节提要对象在运行时无法正确显示?

当我尝试从情节提要中转接时,为啥在这行代码中出现段错误?

为啥我不能 CTRL 拖动情节提要的动作?

当您在情节提要中“因特性而异”时,为啥此自动布局扩展会失败?