Сохранение класса, работающего в фоновом режиме, когда другой запущен - PullRequest
1 голос
/ 06 октября 2011

Я постараюсь объяснить это как можно лучше, если у меня есть этот код здесь

ViewTwoController *home = [[ViewTwoController alloc] initWithNibName:@"contentscreen" bundle:nil];
[self presentModalViewController:home animated:YES];
[home release];

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

Лучший пример, который я могу придумать, - это Android. Если вы начинаете новый класс и не добавляете оператор finish () в класс, из которого был сделан вызов, предыдущий класс работает за текущим классом (который был перемещен вперед) и поддерживает все данные, которые у него были изначально , так что если вы нажмете кнопку возврата, вы увидите информацию, которую вы имели несколько минут назад. Это возможно? Я могу попытаться добавить больше деталей, если люди не могут понять, что я пытаюсь сделать.

Ответы [ 4 ]

1 голос
/ 07 октября 2011

Вам нужно немного лучше понять жизненный цикл объектов.

Объект обычно создается с помощью процесса, состоящего из двух частей.

  1. выделение - (захват памяти дляобъект и его члены)
  2. инициализация - (настройка объекта для использования)

Это можно объединить в один шаг с помощью метода класса +new, который объединяет allocи init.

давайте представим пример класса с именем MyClass и объект этого класса с именем myObject.По соглашению классы начинаются с заглавных букв, а объекты начинаются со строчных букв.Так что без дальнейших церемоний, некоторый код:

MyClass * myObject;

, это делает указатель объекта, но не выделяет для него память и не указывает указателю ссылаться на что-либо.

myObject = [[MyClass alloc] init];

это фактически создает экземпляр MyClass, передает ему сообщение -init, а затем присваивает возвращаемое значение сообщения init myObject.На данный момент счетчик ссылок этого объекта равен 1.

myObject потенциально может выйти за пределы области, но это само по себе не освобождает память, выделенную во время шага alloc.

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

[myObject release];

Эффект освобождения заключается в уменьшении счетчика ссылок, если счетчик ссылок уже равен 1, тогда объектзатем будет передано -dealloc, указывающее, что оно на самом деле освобождается.

обратно на ваш вопрос ... по сути [self presentModalViewController:home animated:YES]; в итоге вызывает -retain на home, так что это не будетуничтожен, пока вы не отклоните модальный контроллер представления.В действительности, когда вы вызываете release или autorelease, вы не освобождаете объект, а просто говорите объекту:
«Эй, ты мне больше не нужен, и если никто больше этого не сделает, то освободи всю памятьчто ты схватил раньше ".

0 голосов
/ 06 октября 2011

Когда вы представляете модальный контроллер представления, его родительский элемент (контроллер представления, с которого вы его представили) не уничтожается (если вы специально не отпустите его, что, вероятно, приведет к падению вашего приложения позже). Так что, если вам интересно, все еще в памяти; это. Что касается задач, которые еще выполняются, это зависит от того, что это за задачи. Например, вы по-прежнему можете отправлять ему сообщения (методы вызова), и он с радостью получит эти сообщения от вашего или от делегата и выполнит все необходимые действия, пока он находится за пределами экрана.

Надеюсь, это помогло.

0 голосов
/ 06 октября 2011

В этом случае вы представляете новый контроллер вида. Основной поток будет в новом представленном контроллере. Если вы хотите, чтобы что-то выполнялось в фоновом режиме в предыдущем контроллере представления, вы можете создать фоновый поток. Это можно сделать с помощью [self perfomselectorInThebackground ...] или некоторых других методов, таких как GCD. (Главное, вы не должны блокировать основной поток)

0 голосов
/ 06 октября 2011

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

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