UIAlertView - покажите порождение утечки памяти

Я относительно плохо знаком с iPhone Development, таким образом, это может быть моим отказом, но он идет вразрез с тем, что я видел.:)

Я думаю, что создаю UIAlertView, который живет только в этом вакууме 'если' оператор.

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

if(!data)
{
    // Add an alert
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                    message:@"Unable to contact server"
                                                   delegate:nil
                                          cancelButtonTitle:@"Ok"
                                          otherButtonTitles:nil];
    NSLog(@"retain count before show: %i", alert.retainCount);
    [alert show];
    NSLog(@"retain count before release: %i", alert.retainCount);
    [alert release];
    NSLog(@"retain count after release: %i", alert.retainCount);
    return nil;
}

Однако консольные журналы экранируют меня.

retain count before show: 1
retain count before release: 6
retain count after release: 5

Я попытался также добавить:

alert = nil;

после выпуска. Это делает сохранить количество 0, но я все еще показываю утечку. И если это помогает, Ответственным Кадром утечки является UIKeyboardInputManagerClassForInputMode. Я также использую ОС 4 Беты 3.

Таким образом, у кого-либо есть какие-либо идеи, как локальный UIAlertView сохраняет количество, увеличил бы себя 5 при вызове - шоу?

Спасибо за помощь!

5
задан Erik 19 May 2010 в 01:44
поделиться

3 ответа

В этом есть смысл, если вы понимаете, что [показ предупреждений] не сразу выводит предупреждение на экран. Я думаю, что происходит то, что [показ предупреждений] добавляет предупреждение в какую-то очередь где-то в системе, которая его сохраняет. На самом деле это не будет отображаться, пока вы не вернетесь из этой функции и не вернетесь в цикл обработки событий. Когда он, в конце концов, будет отклонен, эти счетчики удержания будут уменьшены, и затем он будет освобожден.

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

6
ответ дан 14 December 2019 в 01:03
поделиться

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

3
ответ дан 14 December 2019 в 01:03
поделиться

Я предполагаю, что это связано с бета-версией SDK. В бета-версиях много ошибок / багов. Я бы посоветовал проверить это с помощью SDK 3.1.3 или 3.2.

0
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: