2013-12-04 2 views
0

У меня есть проблема, когда я определяю UILabel добавить его в UIViewIOS выпуск памяти релиз

UIView *dwView=[[UIView alloc] initWithFrame:CGRectMake(20, 50, 975.0, 620)]; 
UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(10.0, 160.0, 950.0, 
170.0)]; 
# i add many UILabel in dwView 
... 
UILabel *label1 
UILabel *label2 
UILabel *label3 
... 
dwView.addView(lable1); 
dwView.addView(lable2); 
dwView.addView(lable3); 
dwView.addView(...); 
[lable1 release]; 
[lable2 release]; 
[lable3 release]; 
[... release]; 

Независимо от того, где я определяю этикетку, я выпускаю его с помощью метода:

[lable1 release]; 
lable1 = nil; 

Я записываю saveCount, все его 0, но я проверил память с помощью профилей-профилей, которые он еще не уменьшает.

Я хочу знать, почему это так, и как я могу уменьшить память.

редактировать 1: Я построил свой проект с ARC

редактировать 2:

теперь определить переменный в .h

{ 
UIView *dwView; 

UILabel *label1,lable2; 
} 

Init в ом

{ 

    dwView=[[[UIView alloc] initWithFrame:CGRectMake(20, 50, 975.0, 620)] autorelease]; 

    label1 = [[[UILabel alloc]initWithFrame:CGRectMake(10.0, 160.0, 950.0, 170.0)] autorelease]; 

    label1.text = wordString; 

    dwView.addView(lable1); 



} 



-(void)dealloc { 
    [super dealloc]; 
    label1 = nil; 
    dwView = nil; 
} 

I t ry код выше, он не работает.

Итак: как я могу выпустить переменная dwView и lable1 Редактировать

+0

Где вы звоните: [lable1 release]; lable1 = nil; это в dealloc? Я полагаю, вы работаете без ARC? – Greg

+0

KeepCount равно 0. Поэтому я думаю, что это уже dealloc. Да, я создаю свой проект с ARC. – user3060257

+0

Невозможно использовать 'release' с ARC. –

ответ

3

Короткий ответ: Используйте ARC.

Если вы решили использовать ручной подсчет ссылок, несколько вещей:

Глядя на retainCount не является полезным. Это просто смутит вас. (Вы не можете видеть ожидающие вызовы autoRelease)

В вашем коде вы создаете label1 как локальную переменную. Затем вы показываете ..., то есть у вас есть код где-то еще. Если вы определяете новую локальную переменную label1 (и вы переключаетесь на «lable1» (различная орфография), она будет равна нулю. Если вы хотите иметь возможность получить ярлык1, чтобы добавить его в супервизор и/или отпустить его, вам либо понадобится сделать это в том же методе/области действия или сделать его переменной экземпляра.

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

+0

Я обновляю свой вопрос, не могли бы вы дать мне более подробные предложения об этом. – user3060257

+0

В вашем редактировании вы говорите: «Я пытаюсь выполнить код выше, он не работает». Он не работает, не помогает. Что не работает? Что именно, ваша программа делает? Это дает компиляцию ошибок? Сбои? Увеличивается ли ваш объем памяти по мере его запуска? Кстати, ваш «код» - это беспорядок, с разными написаниями имен переменных и других опечаток, которые дают понять, что это не настоящий, запущенный код. Не делай этого. Отправьте свой фактический код, который имеет проблемы. В противном случае ваши читатели не смогут сказать, что происходит на самом деле. –

-2

Это лучше использовать ARC. в противном случае используйте autoRelease в конце вашего заявления. Например,

UILabel *label1 = [[[UILabel alloc]initWithFrame:CGRectMake(10.0, 160.0, 
950.0,170.0)]autorelease]; 

в противном случае освободить тех, с

dealloc() label = nil;

+1

Не нужно автообновлять * и * dealloc объект самостоятельно. – JeremyP

+0

Я знаю. Мне интересно, что любое из этих решений. – Laxmi

+0

Пожалуйста, попробуйте дать решение только. Не обращайте внимания на другие ошибки. :x – Laxmi

1

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

+0

** Монитор активности ** может отображать использование переменной памяти? – user3060257

+0

Он покажет вам, сколько памяти использует ваше приложение. –

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