2012-06-05 2 views
-2

Я новичок в разработке iPhone. вот мой код:Правильно ли это код или нет?

- (void)setImage:(UIImage *)image ImageKey:(NSObject *)imageKey 
{ 

    NSNumber *number=(NSNumber*)imageKey; 
    int num=[number intValue]; 
     UIScrollView *scrollViewFamily=(UIScrollView*)[scrollViewProfile viewWithTag:6]; 
     UIButton *btnPhoto=(UIButton*)[scrollViewFamily viewWithTag:num]; 
     [btnPhoto setImage:image forState:UIControlStateNormal]; 

     Photo *aPhoto= [appData.CurrentUser.familyListarray objectAtIndex:num-1000]; 
     aPhoto.photoImg=image; 
} 

Scrollview retainCount является 3 для кнопки 2 и aPhoto для 1. теперь мой вопрос заключается в том, что это право писать, если да, то как освободить эти объекты? help me.Thanking you ...

+1

Если вы новичок в разработке iPhone, и это новый проект, вы должны использовать ARC и не заботиться о сохранении/выпуске объектов. – florian

+0

его уже разработан, и теперь мне нужно проверить утечку памяти ... и его недуговой проект – HML

+1

В этом коде есть много ошибок; имя метода и аргументы, различные случайные ненужные приведения, кажущееся использование числового индекса с именем «ключ» и т. д. Игнорировать 'keepCount', это бесполезно. Я бы посоветовал погрузиться в относительно вводное руководство для разработчиков iOS, а затем пересмотреть этот код. – bbum

ответ

-4

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

+0

Извините, я допустил ошибку: это не ошибка, потому что вы ничего не выделяете. Ваш код идеален. –

+0

Этот ответ не имеет смысла; перемещение броска извне внутрь выражения вызова метода * абсолютно ничего не меняет *. – bbum

+1

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

1

Мой совет нам ARC, и тогда вам не нужно беспокоиться об управлении памятью. Если вы все еще хотите сделать это вручную, а затем принять этот совет straight from the docs относительно retainCount:

Важно Этот метод, как правило, не имеет значения при отладке проблем управления памятью . Поскольку любое количество объектов инфраструктуры может иметь , сохраняется объект для хранения ссылок на него, тогда как у в то же время пулы автоопределений могут содержать любое количество отложенных выпусков на объекте, маловероятно, что вы можете получить полезные информация из этого метода. Чтобы понять основные правила управления памятью, которые вы должны соблюдать, прочитайте «Управление памятью Правила». Чтобы диагностировать проблемы управления памятью, используйте подходящий инструмент: Анализатор LLVM/Clang Static обычно может найти проблемы с управлением памятью еще до запуска вашей программы. Инструмент Object Alloc в приложении «Инструменты» (см. Руководство пользователя приборов) может отслеживать распределение и уничтожение объектов . Shark (см. Руководство пользователя Shark) также распределения памяти профилей (среди множества других аспектов вашей программы ).

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