2016-12-16 2 views
0

Как вы можете преобразовать это в слабую ссылку на себя?Преобразование сильной ссылки на слабую ссылку на себя

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyViewController.handleMessage(_:)), name: "NewMessage", object: nil) 

NSNotificationCenter.defaultCenter().removeObserver(self, name: "NewMessage", object: nil) 

Кроме того, связанный с этим вопрос - когда контроллер вида фактически уничтожается? Я предполагаю, что когда вы входите и выходите из разных видов, контроллеры просмотра все равно остаются в живых? т. е. они не уничтожаются в представленииDidDisappear.

+1

Как ИО 9, центр уведомлений содержит * слабые * ссылки на наблюдателя, см., Например, http://stackoverflow.com/questions/39663984/why-do-you-have-to-remove-observer-in-ios8. –

+0

Хорошо, поэтому ссылка центра уведомлений о себе никогда не станет причиной того, что контроллер просмотра будет придерживаться, верно? – Prabhu

+0

Исправить. Чтобы уточнить, перед iOS 9 он сохранил ссылку «присваивать» наблюдателю, чтобы он также не оставил наблюдателя в памяти. Это ссылка «assign» означала, что вам нужно было удалить себя как наблюдателя в 'dealloc' /' deinit', иначе ваше приложение потерпит крах, когда попытается вызвать селектор на объекте, который был освобожден. – AdamPro13

ответ

0

это функция в ViewController, где он на самом деле выйти из Momory так что здесь вы можете удалить наблюдателю

   deinit { 
        // you code 

       } 

и для создания слабой ссылки на себя вы можете использовать

   weak var this = self