Документация Apple гласит: «Когда срабатывает segue, он запускает новый контроллер представлений и переходит на экран». Некоторое поведение, которое я вижу, вызывает у меня вопрос о том, действительно ли VC уничтожен и воссоздан каждый раз, когда просматривается представление.viewController lifecycle
В моем приложении каждый раз, когда я seque к определенному мнению Хочу отметить, что следующая функция ViewController называется (что согласуется с ВК воссоздается каждый раз, когда он sequed к):
- (id)initWithCoder:(NSCoder *)aDecoder
Примечание этот ViewController также источник данных для его CollectionView и обладает свойством:
@property (strong, nonatomic) NSMutableArray *messages;
и каждый раз, когда initWithCoder называется я Alloc и инициализировать массив сообщений и назначить его над указателем.
Когда я перехожу обратно в другой вид, а затем снова отскакиваю, я вижу странность, которая заставила меня думать, что VC может быть повторно использован. Или поочередно, если первый экземпляр не был уничтожен и все еще может получать уведомления.
Первое, что странно, это то, что в viewDidLoad, если я вызываю addObserver: self для конкретного уведомления, которое я хочу, чтобы этот VC обрабатывал, во второй раз, когда я перехожу в этот VC, я получаю два уведомления, отправленные на уведомление VC обработчик для каждого отправленного уведомления. Это согласуется с повторным использованием VC, иначе почему обработчик будет вызван дважды?
Но, несмотря на это, сценарий повторного использования заключается в том, что initWithCoder на самом деле называется вторым при загрузке представления.
Поскольку я не хочу получать 2 или более уведомлений для каждого сообщения, я использую статическое логическое значение, чтобы гарантировать, что addObserver вызывается только один раз. То есть addObserver вызывается только при первом вызове viewDidLoad, а не в последующем.
viewDidLoad и обработчик уведомлений получают доступ к массиву сообщений. Во втором сегменте viewDidLoad, похоже, обращается к новому массиву сообщений alloc/init'd, но когда обработчик уведомлений обращается к сообщениям, он кажется предыдущим массивом сообщений с предыдущего времени загрузки VC.
Любые идеи?
Да, я действительно думал об этом во время обеда, и я думаю, что в центре уведомлений содержится ссылка на viewController. – bhartsb