为什么在使用故事板时会反复调用AwakeFromNib?

时间:2012-05-19 23:50:14

标签: ios xamarin.ios awakefromnib

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

    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 个答案:

答案 0 :(得分:2)

每次从storyboard / segue加载该视图的新实例时,将调用

AwakeFromNib。如果您在故事板中处于假设状态,那么每次都应该调用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();
}