Приложение на основе ModalViewController аварийно завершает работу после 30 презентаций

У меня есть приложение для ipad, в котором есть категории (контроллеры таблицы внутри него) и подробные представления, в которых веб-просмотр показывает информацию о строке в таблице.

В функции didSelectRowAtIndexPath представлений таблиц категорий я использую код как:

DetayViewController *dvc = [[DetayViewController alloc] init];
Blog *b = (Blog *)[self.blogArray objectAtIndex:indexPath.row];
dvc.cagirilanBlog = b;
[self presentModalViewController:dvc animated:YES];

Это прекрасно работает. Но при использовании приложения, если вы щелкнете строку в представлении таблицы, откроете страницу сведений и закроете ее примерно 30 раз, приложение выйдет из строя и закроется.

Предупреждения, которые я получаю при сбое приложения, выглядят так:

**Received memory warning. Level=1**

**Received memory warning. Level=2**

**Program received signal:  “0”.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib")**

Когда я закрываю контроллер модального представления, я освобождаю весь объект, который использовал в подробном представлении. Но вопрос, который я не могу решить, почему он падает? это ошибка? Могу ли я использовать presentModalViewController более 30 раз?

Пожалуйста помогите.

Спасибо.


person cenk ebret    schedule 10.10.2010    source источник


Ответы (1)


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

В твоем случае :

[dvc release]

(Если нет, то все объекты, которые вы освободили в методе Dealloc, вызываться не будут!)

Вы также можете использовать инструмент производительности утечки, поставляемый с Xcode. (очень полезно для обнаружения утечек памяти)

Вам следует прочитать этот документ: http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

person William Remacle    schedule 10.10.2010
comment
Сделайте это: DetayViewController *dvc = [[[DetayViewController alloc] init] autorelease]; - person William Remacle; 10.10.2010
comment
Дорогой Уильям, когда я использую этот код: [dvc release]; при создании DetayViewController, когда я закрываю modalviewcontroller, приложение вылетает из-за метода -dealloc. Например, он говорит: [DetayViewController urlReq]: сообщение, отправленное на освобожденный экземпляр 0x62c39d0, после этого я попытался очистить свой метод Dealloc и не освобождать объекты вручную, но даже в этом случае приложение неожиданно аварийно завершает работу и выдает эту ошибку: -[ DetayViewController responsesToSelector:]: сообщение отправлено на освобожденный экземпляр 0x62ca070, и я не могу понять. Я не использую такой метод, как responsesToSelector :( - person cenk ebret; 11.10.2010
comment
Нет, не делайте то, что говорит @William в первом комментарии. Вместо этого напишите [dvc release]; после запуска файла [self presentModalViewController:dvc animated:YES];. Никогда не используйте autorelease, если в этом нет крайней необходимости. - person Emil; 11.10.2010
comment
Да, релиз должен быть после presentModalViewController. Извините, автозапуск не работает. - person William Remacle; 11.10.2010