iPhone - Управление памятью - правильно ли я создаю и освобождаю эту переменную? - PullRequest
0 голосов
/ 19 августа 2010

Хорошо, вот ситуация. У меня есть класс контроллера View, который служит основным видом (MainView). Он содержит подпредставление, о котором заботится другой контроллер представления (ChangingView). Теперь каждые четыре секунды ChangingView необходимо изменить свой вид. То, что я сейчас делаю, выглядит примерно так.

ChangingView = [[AnotherView alloc] initWithNibName:@"AnotherView" bundle:[NSBundle mainBundle]];
[MainView addSubview:ChangingView.view]; 

Теперь, после того, как 4 секунды истекли и до того, как были вызваны линии, я делаю следующее.

[ChangingView release];
[ChangingView.view removeFromSuperview];

Что происходит, я получаю предупреждения памяти как сумасшедшие. И в конечном итоге он дает мне сообщения об отладке «программа отправила« 0 »» или «средства форматирования данных в настоящее время недоступны». Оба из которых я считаю, означает, что у меня не хватает памяти. Я не думаю, что это должно происходить, так как объем содержимого в представлениях не является несколькими МБ, поэтому по какой-то причине это должно быть суммирование или что-то в этом роде. Если вам нужны какие-либо разъяснения, пожалуйста, спросите, и любая помощь будет принята с благодарностью, так как я в настоящее время в тупике. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 19 августа 2010

Что-то раздражает меня в этих двух строках кода:

[ChangingView release];
[ChangingView.view removeFromSuperview];

Я думаю, что тот факт, что вы можете получить доступ к ChangingView.view после того, как вы выпустили без получения ошибки EXC_BAD_ACCESS, означает, что вы 'неправильно выпускает ChangingView везде (что, кстати, вам, вероятно, следует вызывать ChangingView *** Controller ***, чтобы не перепутать людей, будь то подкласс UIView или UIViewController).

Проверьте, есть ли у ChangingViewМетод dealloc фактически всегда вызывается.Когда-либо.Недостаточно информации или кода, чтобы сообщить вам, где вы забыли выпустить его, но держу пари, что именно в этом проблема.

0 голосов
/ 19 августа 2010

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

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

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