Утечка памяти, вызывающая сбой приложения - PullRequest
1 голос
/ 04 марта 2011

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

</p> <pre><code> UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setBackgroundImage:[UIImage imageNamed:@"gembtnblu.png"] forState:UIControlStateNormal];<br> button.frame = CGRectMake(0, 0, TOOLBAR_BUTTON_WIDTH , TOOLBAR_BUTTON_HEIGHT);<br> [button setTitle:[NSString stringWithFormat:@"%c",choice] forState:UIControlStateNormal];<br> [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [button addTarget:self action:@selector(ChoiceButtonTouched:) forControlEvents:UIControlEventTouchUpInside]; [button setTag:choice]; UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; //Add button to the array [tempItems addObject:customBarItem]; if (isReviewing == TRUE) { customBarItem.customView.userInteractionEnabled=FALSE; } //release buttons [customBarItem release]; numberOfChoices++;

Но я не могу определить проблему. Пожалуйста, помогите, ребята, я застрял в этом на несколько дней

вот ещё немного кода

NSArray *items=[[NSArray alloc] initWithArray:(NSArray *)tempItems];<br> [tempItems release];</p> <pre><code>//add array of buttons to toolbar [toolbar setItems:items animated:YES]; [self.view addSubview:toolbar];

статический анализатор говорит, что существует потенциальная утечка с массивом 'items'. Но если я добавлю оператор релиза, приложение вылетает

Ответы [ 4 ]

0 голосов
/ 04 марта 2011

Вы выпустили панель инструментов после добавления ее в качестве подпредставления? Если вы этого не сделали и не выпускаете панель инструментов в dealloc, значит, ваша утечка.

0 голосов
/ 04 марта 2011

Выложенный вами фрагмент исходного кода не содержит ошибок управления памятью.Я предполагаю, что изображение, которое вы загружаете, является маленьким, так как это для кнопки.Обратите внимание, что imageNamed: кэширует изображение, но при условии, что изображение маленькое, это не проблема.

Либо проблема кроется где-то еще в коде, либо на вашем устройстве одновременно открыты слишком много приложений.Остерегайтесь приложений, работающих в фоновом режиме: они все еще потребляют память.Попробуйте закрыть все приложения и снова запустить свои на устройстве.Посмотрите, испытываете ли вы точно такое же поведение при выполнении того же фрагмента кода.

0 голосов
/ 04 марта 2011

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

0 голосов
/ 04 марта 2011

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

Я бы порекомендовал запустить статический анализатор для этого кода (Build and Analyze), ошибки должны помочь вам понять, где вы находитесьне выпускай вещи, которыми ты должен быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...