Внедрение устаревшего метода [duplicate]

Второй ответ выше - самый простой.

  int n = Integer.parseInt (System.console (). readLine ());   

Вопрос: «Как читать со стандартного ввода».

Консоль - это устройство, обычно связанное с клавиатурой и дисплеем, с которого запускается программа. [ ! d5]

Возможно, вы захотите проверить, нет ли консольного устройства Java, например Java VM не запускается из командной строки или перенаправляются стандартные входные и выходные потоки.

  Консоль cons;  if ((cons = System.console ()) == null) {System.err.println («Не удается получить консоль»);  ...}  

Использование консоли - простой способ ввода чисел. В сочетании с parseInt () / Double () и т. Д.

  s = cons.readLine («Введите int:»);  int i = Integer.parseInt (s);  s = cons.readLine («Ввести двойной:»);  double d = Double.parseDouble (s);   
52
задан Hons 26 September 2012 в 14:52
поделиться

4 ответа

Вы должны использовать методы - (void)didReceiveMemoryWarning и - (void)dealloc.

В iOS 6 методы viewWillUnload и viewDidUnload для UIViewController теперь устарели. Если вы использовали эти методы для выпуска данных, вместо этого используйте метод didReceiveMemoryWarning. Вы также можете использовать этот метод для публикации ссылок на представление контроллера представления, если он не используется. Вам нужно будет проверить, что представление не находится в окне, прежде чем делать это.

Итак, вы должны проверить, находится ли ваше представление в окне первым, а затем удалить своего наблюдателя в didReceiveMemoryWarning

95
ответ дан Alexander Farber 15 August 2018 в 22:29
поделиться
  • 1
    Вероятно, это правильный ответ. Тем не менее странно, что они удалили это сообщение. Я узнал, используя SDK, следуя слайдам Пола Хегарти, и, конечно же, они все еще для iOS5. Я собираюсь проверить его обновленные слайды в этом году, может быть, он дает хороший намек на это. – Hons 8 October 2012 в 13:08
  • 2
    @ Если это вообще не странно, viewDidUnload был явно указан в документации, вызванной только в том случае, если ваше представление выгружено из-за предупреждения о памяти. Если вы добавите наблюдателя в viewDidLoad и удалите его только в viewDidUnload, то много времени вы будете освобождены без его удаления. Это приведет к тому, что в центре уведомлений появится висячий указатель, ведущий почти наверняка к сбою позже. – Tommy 31 October 2012 в 02:12
  • 3
    @yourfriendzak вы можете проверить, нет ли view.window. – Groxx 22 November 2012 в 02:47
  • 4
    @Groxx Но будьте осторожны - доступ к «представлению» приведет к тому, что представление будет загружено, если оно еще не было. Даже Apple ошибается в своем примере кода. Вы должны использовать if ([self isViewLoaded] && self.view.window) – Mike Weller 15 April 2013 в 16:46
  • 5
    Хорошо, хорошо. Спасибо @MikeWeller, вы правы! Я думаю, что я обнаружил это и добавил ту же проверку, но я никогда не возвращался и не обновлял ситуацию здесь. – Groxx 15 April 2013 в 19:20

Ответ Алекс хороший. Но мне нравится правильное спаривание. По этой причине, если представление не нужно уведомлять, когда его даже не видно, я обычно добавляю уведомление в viewWillAppear и viewDidDisappear

9
ответ дан Anonymous White 15 August 2018 в 22:29
поделиться
  • 1
    viewDidUnload вызывается, когда представление разгружается, и viewDidDisappear только тогда, когда представление исчезло. Уведомления, которые должны были быть незарегистрированы в режиме viewDidUnload, теперь, начиная с iOS 6.0, должны быть незарегистрированы с помощью doReceiveMemoryWarning или dealloc – Daniel García Baena 18 October 2013 в 13:49

Почему бы просто не удалить наблюдателя в функции DEALLOC? И если вы используете ARC, не вызывайте [super dealloc]

. Если вы просматриваете функцию контроллера dealloc, вызов не вызывается, тогда вам нужно выяснить, почему это происходит. Возможно, у вас есть NSTimer, запущенный на ViewController, и когда вы открываете представление, это приведет к тому, что dealloc не будет вызван. Или вид сохраняется еще где.

4
ответ дан Dan H 15 August 2018 в 22:29
поделиться
  • 1
    вся точка зренияDidUnload заключается в том, что вы можете выгружать представление и выпускать материал для сохранения памяти. Когда контроллер вида все еще существует – user102008 31 October 2012 в 01:27
  • 2
    В iOS 6 методы viewWillUnload и viewDidUnload UIViewController теперь устарели .... – Dan H 31 October 2012 в 12:01
  • 3
    Таким образом, вы не должны использовать метод dealloc. Потому что объект еще не готов к уничтожению. – Craimasjien 1 November 2012 в 10:42
  • 4
    Он говорит об удалении наблюдателя в своем начальном посте, если он добавляет наблюдателя в viewDidLoad, безусловно, лучшее место для его удаления - это функция dealloc. Я привел пример того, как это сделать, если он использует ARC. – Dan H 1 November 2012 в 11:02
  • 5
    Если вы добавите наблюдателя в viewDidLoad (который можно вызвать несколько раз) и удалите его в dealloc, вы можете быть зарегистрированы несколько раз для уведомления. Вы должны использовать viewDidAppear и viewDidDisappear для запуска / остановки прослушивания. – deanWombourne 7 November 2012 в 14:38

Прежде всего, даже если viewDidUnload не устарел, вам, должно быть, пришлось отменить это уведомление в viewDidUnload AND dealloc. Даже до iOS 6, viewDidUnload НЕ вызывается в большинстве случаев; только в ситуациях с низкой памятью. Поэтому, если бы вы только помещали его в viewDidUnload, а не dealloc раньше, он не был бы незарегистрирован, и, вероятно, он был бы разбит, когда он был освобожден и получил уведомление. Поэтому вам, должно быть, пришлось поместить его в dealloc, чтобы он работал правильно.

Во-вторых, если вы делали это правильно раньше, вам не нужно делать что-либо дополнительное для его работы правильно в iOS 6. Единственное отличие в iOS 6 состоит в том, что представления больше не выгружаются вообще (даже в ситуациях с низкой памятью). Таким образом, это то же самое, что и в iOS 5, когда вы не столкнулись с ситуацией с низкой памятью. Поскольку представления не выгружаются, viewDidLoad вызывается только один раз, поэтому ваше уведомление будет регистрироваться только один раз. Он будет незарегистрирован в dealloc, поскольку вы должны положить его для того, чтобы он работал правильно.

12
ответ дан user102008 15 August 2018 в 22:29
поделиться