2013-04-15 2 views
1

Я создал очень простое приложение для iPhone с одним представлением и UIButton с действием для отображения UIAlertView. Я использую следующий кодПроблемы с памятью UIAlertView

- (IBAction)showAlert:(id)sender { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
    [alert release]; 
} 

инструменты распределения экрана инструмент выстрел прилагается. enter image description here

В изображении, низкие выделения памяти показывает приложение работает без показа UIAlertView, и высокие пики показывают использование памяти после того, как я показал UIAlertView, даже я уволил UIAlertView и отпустить его, но он продолжает показывать то же состояние памяти и жизнь объектов (до 50 000). но когда я нажимаю кнопку «домой», приложение идет в фоновом режиме, и вы можете видеть в прикрепленных изображениях живые объекты и уменьшать память.

Вопросы:

Что не так с моим кодом?

Почему даже после выпуска UIAlertView он показывает высокое распределение памяти и живые объекты?

Почему мне нужно идти на задний план, чтобы освободить память и живые объекты?

ответ

1

Я бы не стал слишком беспокоиться об этом, если это не основное место в вашем приложении, или если каждый UIAlertView кумулятивно добавляет больше памяти.

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

Когда вы нажимаете кнопку «домой», ваше приложение переходит на задний план, и как часть освобождения памяти принудительно. То есть кэши опорожняются, цикл авторекламы запускается и т. Д.

+0

На самом деле я работаю над другим приложением, где я делаю оптимизацию памяти с помощью инструмента инструмента, а uialertview значительно увеличивает живые объекты и не уменьшает использование до тех пор, пока i нажмите кнопку «домой». Поэтому я хочу решить эту проблему. –

+1

Мне стало любопытно, поэтому написал небольшую тестовую программу. В моих тестах только первый UIAlertView увеличивает память, а не дополнительные. И увеличение составляет всего 250 тыс., Поэтому не о чем беспокоиться. Возможно, он кэширует фоновое изображение UIAlertView, например. – fishinear

+0

Да сначала увеличивается, но не уменьшается независимо от того, сколько времени вы тратите на приложение. В моем тестовом приложении живые байты перед первым показом UIAlertView составляют 670 КБ (8285 живых объектов), а после показа предупреждения живые байты составляют 3,50 МБ (48 000 живых объектов) –

Смежные вопросы