Почему 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 ответ

Решение

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();
}
Другие вопросы по тегам