Почему 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();
}