Лучше всего приблизьтесь к отладке applicationDidReceiveMemoryWarning на iPhone?

Должна работать простая индексация массива:

import numpy as np

m =  np.array([[[0.4,0.5],[0.2,0.3]], [[0.8,0.1],[0.7,0.9]]])
my_id = np.array([[[1,2],[2,3]], [[3,1],[3,2]]])
mask = np.array([[[0,1],[1,0]], [[1,1],[1,1]]])

print(m[(mask != 0) & (my_id == 3)])          # [0.8 0.7]
print(m[(mask != 0) & (my_id == 3)].mean())   # 0.75

Кроме того, id является встроенной функцией, поэтому не называйте переменную это. Это будет затенять встроенный.

9
задан Rob 20 March 2009 в 16:42
поделиться

2 ответа

В основном Вы получаете это предупреждение, потому что (неудивительно) iPhone является опасно низким на памяти. Это может обычно быть по одной из двух причин;

  1. У Вас есть утечка памяти.
  2. Вы выделяете слишком много объектов и должны пересмотреть Ваш дизайн.

Для первого необходимо выполнить инструменты и исследовать выделения памяти. Это может действительно замедлить Ваше приложение (и требует дополнительной памяти), так попытайтесь тестировать области своего приложения по одному. Например, если у Вас есть несколько переключателей представлений между ними пару раз.

Для второго необходимо будет исследовать вещи, которые Вы делаете, который мог привести к выделениям памяти большой емкости. Например, если Вы пишете браузер Flickr, Вы, возможно, должны были бы сократить количество изображений, Вы загрузили в любом время, или свободный некоторые неиспользованные при получении этого предупреждения.

Это о единственных общих правилах, которые я могу предложить, не зная больше о Вашем приложении.

К сожалению, нет никакого реального пути (что я знаю о) получить числа для текущего выделения памяти от iPhone OS. Это делает действительно трудным изолировать области Вашего применения, которые являются непреднамеренно голодной памятью.

2
ответ дан 4 December 2019 в 23:07
поделиться

Существует много хороших статей для управления памятью в приложении для iPhone. Вот некоторые полезные ссылки.

Вещи необходимо в целом заботиться о

  1. Выпустите любые переменные, в которых Вы не нуждаетесь
  2. Всегда дескриптор didReceiveMemoryWarning и выпустите любые переменные, не используемые
  3. Остановите любые тяжелые памятью процессы в applicationDidReceiveMemoryWarning как аудио/видео проигрывание, UIImagePickerController и т.д.

ОТРЕДАКТИРУЙТЕ Это больше не применяется. imageNamed: имел кэширующиеся проблемы до 3.x версии ОС. Проблема больше не существует, и необходимо использовать imageNamed: (делает дисплей Retina реализации легче),

  1. Не использовать imageNamed: создать объекты UIImage.
5
ответ дан 4 December 2019 в 23:07
поделиться